我正在编写从单链表中删除节点的常见方法,但我不确定我删除它们的方式(通过使用 FREE())是否正确。我想真正删除节点并释放内存。我已经提供了 Node 的 strut 定义以及如何创建 Node 结构。
我理解在 Java 中任何时候都没有指向数据,它会被自动清理。我想C,我必须免费使用,但我使用正确吗?例如下面的例子,当我“释放”电流时,我可以在之后做电流参考吗?做这个的最好方式是什么?
谢谢,我希望我的问题很清楚!
typedef struct Node {
int data;
struct Node *next;
} Node;
struct Node* newNode(int value) {
struct Node* node = (Node *)malloc(sizeof(struct Node));
if (node == NULL) {
// malloc fails. deal with it.
} else {
node->data = value;
node->next = NULL;
}
return node;
}
void delete(int value, struct node *head) {
struct Node* current = head;
struct Node* previous = NULL;
while (current != NULL) {
if (current->data == value) {
if (previous == NULL) {
current = current->next;
free(head);
} else {
previous->next = current->next;
free(current);
current = previous->next;
}
} else {
previous = current;
current = current->next;
}
}
}