这里我有一个双位置列表的删除位置功能。我试图保存指向最后一个节点的指针,这样当反向打印时,我不必迭代到最后一个节点。
node* deleteByPos(node* list, node** last, int position) {
int c = 0;
node* temp;
node* prev;
temp=list;
if (temp==NULL) {
printf("No nodes available to delete\n\n");
return list;
} else {
while(temp!=NULL && c != position) {
prev=temp;
temp=temp->next;
c++;
}
if (temp==NULL) {
printf("Reached end of list, position not available\n\n");
return list;
} else if (temp->next == NULL) {
prev->next=temp->next;
temp->next->prev = prev;
&last = temp->next;
free(temp);
return list;
} else {
prev->next=temp->next;
temp->next->prev = prev;
free(temp);
return list;
}
}
}
当我尝试删除列表中的最后一个位置时,出现了分段错误。我该如何解决?
答案 0 :(得分:1)
在你的else块中,如果(tmp-> gt; next == NULL)你有一行
temp->next->prev = prev;
这是无效的。您正在尝试使用空指针。