我在尝试按升序将newNode插入链表时遇到了一些问题。这是我的代码:
void insertSortedLinkedList(LinkedList *l, int x)
{
ListNode* newN;
ListNode *cur, *previous;
if (l->head == NULL)
{
l->head = malloc(sizeof(ListNode));
l->head->item = x;
l->head->next = NULL;
}
else
{
newN = malloc(sizeof(ListNode));
newN->item = x;
cur = l->head->next;
previous = l->head;
while (cur!= NULL && cur->item < x) {
previous = cur;
cur= cur->next;
}
newN->next = cur;
previous->next = newN;
}
l->size++;
}
使用这些代码,我输入了1,3,5,7,9,6
的输入,并设法获得了按升序排列的1,3,5,6,7,9
的输出。然而,当我尝试使用3,2,1
时,得到的输出是3,1,2
。作为第一个输入的3不会移位。
知道怎么解决这个问题吗?
提前谢谢。
关闭。问题是,您的代码永远无法在已经有元素的列表中插入新节点作为头。
这里有一个重组的想法:
void insertSortedLinkedList(LinkedList *l, int x)
{
ListNode* newN;
ListNode *cur, *previous;
newN = malloc(sizeof(ListNode));
newN->item = x;
previous = NULL;
cur = l->head;
while (cur!= NULL && cur->item < x) {
previous = cur;
cur= cur->next;
}
if (previous == NULL)
l->head = newN;
else
previous->next = newN;
newN->next = cur;
l->size++;
}