gpt4 book ai didi

c - 链表删除节点代码什么时候使用free?

转载 作者:行者123 更新时间:2023-12-04 10:40:51 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>

struct item {
int key;
int data;
struct item *next;
};

struct item *head = NULL;


void delete(int key)
{
if(head == NULL) {
;
} else if(head->key == key) {
head = head->next;
} else {
struct item *curr = head;
struct item *prev = NULL;
int found = 0;
while(curr != NULL) {
if(curr->key == key) {
found = 1;
break;
} else if(curr->key > key) {
break;
}
prev = curr;
curr = curr->next;
}
if(found) {
prev->next = curr->next;
}
}

}

键已排序。 delete 接收一个键然后将其删除。它有效,但我不明白何时使用免费。

我们必须 free() 我们要从列表中取消链接的结构项

最佳答案

你一定认为“malloc”和“free”与向某人借东西一样。每当您从某人那里借一支笔(malloc)时,您都需要稍后归还(免费)。

就您的情况而言,您必须在确定没有任何东西会再访问节点后释放该节点:

#include <stdio.h>
#include <stdlib.h>

struct item {
int key;
int data;
struct item *next;
};

struct item *head = NULL;


void delete(int key)
{
if(head == NULL) {
;
} else if(head->key == key) {
head = head->next;
} else {
struct item *curr = head;
struct item *prev = NULL;
int found = 0;
while(curr != NULL) {
if(curr->key == key) {
found = 1;
break;
} else if(curr->key > key) {
break;
}
prev = curr;
curr = curr->next;
}
if(found) {
prev->next = curr->next;
free(curr); // Here
}
}
}

它的行为与借用机制完全相同:归还后你不能使用任何东西(免费使用) - 否则它会崩溃。

关于c - 链表删除节点代码什么时候使用free?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49482736/

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