我正试图在链表中插入一个节点,以便节点按照de idx参数以升序排列。
void add(int i){
if(find(i)==NULL){ //if node does not exist
node *m=new node;
m->idx=i;
m->values=NULL;
m->next=NULL;
if(list==NULL){ //if list is empty
list=m;
return;
}
if(i < list->idx){ //if the new node comes before the head node
m->next=list;
list=m;
return;
}
//if the new node is bigger than the maximum node index in the list
if(i > maxIdx(list)){
node *last=lastNode(list);
last->next=m;
}
//else normal insertion
node *prev=list;
node *curr=list->next;
while(curr!=NULL){
if( i < curr->idx){
m->next=curr;
prev->next=m;
return;
}
prev=curr;
curr=curr->next;
}
}
}
用正确的实现进行了编辑,之前缺少第四个if。
就segfault而言,这对我来说似乎也是正确的。但是,当i
大于列表中的最大数字时,您不会考虑这种情况。在这种情况下,您应该在列表的末尾插入i
。因此,请先尝试修复这个错误,也许它也会修复segfault(它来自其他地方,可能来自您的find()
实现)。
现在看来,这就是答案(正如你对我的评论所证实的那样)。