将newNode按升序插入LinkedList

时间:2015-10-31 04:00:44

标签: c linked-list nodes

尝试按升序将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不会改变。

知道如何解决这个问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

你关闭了。问题是你的代码永远不能在一个已经有元素的列表中插入一个新节点作为头部。

以下是重组的一个想法:

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++; 
}