gpt4 book ai didi

c - C中的单链表 - 节点删除问题

转载 作者:太空宇宙 更新时间:2023-11-04 01:41:56 26 4
gpt4 key购买 nike

我正在用 C 语言实现一个单向链表,但遇到了删除节点函数的问题。它删除元素,链接它的两个邻居,但后面的节点将下一个节点地址设置为 NULL。为什么?有人可以帮忙吗?

  struct node{
struct node* next;
int value;
};

struct list{
struct node* head;
struct node* tail;
};

void remove_node(struct list* plist, int value){

struct node* current;
struct node* temp;
current = plist->head;
if (!(current)) return;
if ( current->value == value ){
if (!(current->next)){
plist->head = NULL; plist->tail = NULL;
}
else {
plist->head = current->next;
free(current);
}
}
else {
while(current->next){
if(current->next->value==value){
if ((current->next)->next){
temp = current->next;
current->next = (current->next)->next;
free(temp);
}
else{
temp = current->next;
plist->tail = current;
current->next = NULL;
free(temp);
break;
}
}
current = current->next;
}
}
}


Node current current->next
0 0x9f39018 0x9f39028
1 0x9f39028 0x9f39038
2 0x9f39038 0x9f39048
3 0x9f39048 0x9f39058
4 0x9f39058 0x9f39068
5 0x9f39068 0x9f39078
6 0x9f39078 0x9f39088
7 0x9f39088 0x9f39098
8 0x9f39098 0x9f390a8
9 0x9f390a8 (nil)

after remove(5)

0 0x9f39018 0x9f39028
1 0x9f39028 0x9f39038
2 0x9f39038 0x9f39048
3 0x9f39048 0x9f39058
4 0x9f39058 0x9f39078
6 0x9f39078 (nil)

最佳答案

这段代码:

if ((current->next)->next){  
current->next = (current->next)->next;
free(current->next);

从列表中删除后释放下一个节点。换句话说,您正在释放错误的节点。

关于c - C中的单链表 - 节点删除问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4230590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com