我正在处理一个项目,我需要在一个有序列表中插入一个节点。我尝试了这段代码,但程序一直在崩溃。
调用函数是:
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;
}
答案 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;在您的实际查询中。