C语言 从链表中删除给定节点



我正在学习链表,我编写了一个具有各种函数的程序来创建和操作列表,其中之一是:

void DeleteNode(int x) {
struct Node* temp = head;
struct Node* prevptr = temp->prev;
struct Node* nextptr = temp->next;
if(temp == NULL) return;
while(temp->data != x) {
temp = temp->next;
}
prevptr->next = temp->next;
nextptr->prev = temp->prev;
free(temp);
}

当我运行我的主函数时:

int main() {        
InsertAtHead(2); Print(); 
InsertAtHead(1); Print();
InsertAtTail(3); Print();
InsertAtTail(4); Print();
DeleteNode(3); Print();
}

输出如下所示:

Forward: 2 
Forward: 1 2 
Forward: 1 2 3 
Forward: 1 2 3 4 
Segmentation fault (core dumped)

我想这意味着我在尝试删除节点的过程中丢失了列表,但无法弄清楚如何删除。我在这里做错了什么?

struct Node* prevptr = temp->prev;

这可能是你的程序搞砸的原因。 设置temp = head后,将 temp 节点设置为等于第一个节点。 除非它是一个双重循环链表,否则第一个节点不应该有prev的PTR。此外,您不会发送头节点或返回头节点。您temp设置为等于称为 head 的随机结构,而不让函数知道head是什么。

相关内容

  • 没有找到相关文章

最新更新