gpt4 book ai didi

c - C中的链表删除后如何释放节点

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:23 25 4
gpt4 key购买 nike

我有一个非常基本的疑问。我使用结构创建了一个链接列表,这是我的删除代码。

void delete(int num)
{
struct node* temp=head;
struct node* prev=head;
if(temp == NULL)
printf("List Empty\n");
else
{
while(temp != NULL)
{
if(temp->value == num)
{
prev=temp->next;
free(temp);
break;
}
else
{
prev=temp;
temp=temp->next;

}
}

运行这段代码后,节点没有被删除。如果我在 free(temp) 之后打印 temp->value,则值为 0。但事实并非如此。免费的应该删除节点。所以我不明白 0 从哪里出现。知道这段代码有什么问题吗?

我的展示功能:

void show()
{
struct node *temp = head;
while(temp != NULL)
{
printf("---- %d ---- ", temp->value);
temp=temp->next;
}
printf("\n\n");
}

我的结构:

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

谢谢。

最佳答案

当你在delete中找到节点时:

if(temp->value == num)
{
prev=temp->next;
free(temp);
break;
}

您实际上并没有使前一个节点的下一个指针指向节点的下一个链接。

相反你应该做例如

prev->next = temp->next;

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

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