c-将newNode按升序插入LinkedList



我在尝试按升序将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++; 
}

相关内容

  • 没有找到相关文章

最新更新