在C中的有序链表中插入节点

时间:2016-11-17 13:24:36

标签: c linked-list

我正在处理一个项目,我需要在一个有序列表中插入一个节点。我尝试了这段代码,但程序一直在崩溃。

调用函数是:

head = insertorder(node, head);

这是函数定义代码:

nodeptr_t insertorder(nodeptr_t nn, nodeptr_t head) {
    nodeptr_t w;

    w = head;
    if(head==NULL)
        return nn;

    while(w->next!=NULL && w->next->key < nn->key)
       w = w->next;

    w->next = nn;
    nn->next = NULL;
    return head;
}

2 个答案:

答案 0 :(得分:2)

插入新节点后,您将丢失尾部。您需要执行以下操作:

...
while(w->next!=NULL && w->next->key < nn->key)
    w = w->next;
nn->next = w->next;
w->next = nn;
...

答案 1 :(得分:1)

请尝试此代码。

nodeptr_t insertorder(nodeptr_t nn, nodeptr_t head){
nodeptr_t w;

if(head==NULL || head->key >=nn->key)
{
    nn->next = head;
    head = nn; 
}
else
{
    w = head;
    while(w->next!=NULL && w->next->key < nn->key)
      { w = w->next;}
    nn->next = w->next;
    w->next = nn;
 }
 return head;
}

如果可能,请复制&#39; nodeptr_t&#39;在您的实际查询中。