所以基本上我是为linkedList编写代码的,但由于这里的代码,我一直收到memoryLeak。有谁能帮我找出原因,并向我解释我做错了什么吗?
struct Node* deleteNode(int data, struct Node* head){
struct Node* current = head;
struct Node* previous = NULL;
if(head == NULL){
return NULL;
}
while(current->data != data){
if(current->next == NULL){
return NULL;
}else{
previous = current;
current = current->next;
}
}
if(current == head){
struct Node* temp = head;
head = head->next;
free(temp);
}else
{
previous->next = current->next;
}
current = NULL;
return head;
}
当free()
不是链表的第一个元素时,您永远不会在已删除的列表节点上调用它。
由于在current != temp
的情况下没有调用free
,因此出现内存泄漏。在else
部分中所做的只是简单地分配previous->next = current->next
,而不删除当前节点。
您已经使用while
循环找到了要删除的节点,所以在previous->next = current->next
之后添加free(current)
。