我正试图将一个新元素按升序插入链表,我输入3,1,9,7,5的代码输出1,1,1,1,1,1,但我想要的输出是1,3,5,7,9
head实际上在类List的私有实例变量中,这是一个成员函数
它被称为:
List a;
a.insertInOrder(3); a.insertInOrder(1); a.insertInOrder(9); a.insertInOrder(7); insertInOrder(5);
输出为1,1,1,1,1
void List::insertInOrder( int data) {
Node *newNode = new Node;
newNode->data=data;
if(head == null || head->data > data) {
newNode->next = head;
head = newNode;
}
else{
Node *cur = head;
while(cur->next != null && current->next->data < data)
cur = cur->next;
newNode->next = cur->next;
cur->next = newNode;
}
}
看起来大多有效,但:
while(cur->next != null && current->next->data < data)
在这里,您在一个子句中指"cur",在另一个子句则指"current"。"当前"似乎不存在,但也许你有全局?
但是,即使这样也会打乱排序,所以我怀疑错误是在您的输出代码中,而不是排序代码中。
您没有递增nextC
,所以while循环将data
与一个数字进行比较。cur
什么都不做,因为您没有像使用nextC
那样在条件中使用它。
while(cur->next != null && nextC->data < data) //nextC->data is set only once
cur = cur->next; //cur incremented, but for what?