struct node * delete_list(struct node * list)
{
struct node* temp = (struct node*)malloc(sizeof(struct node)); // allocates memory for temp
while (list != NULL)
{
temp = list->next;
free(list);
list = temp;
}
free(temp);
return list;
}
我试着在纸上手工计算出我的函数,它似乎奏效了。我尝试了一个长度为3的链表示例,发现我的函数可以删除每个节点,并在末尾将列表指向null。实际结果并没有反映出这一点。
有人能把我推向正确的方向吗?
您在这里所做的工作超出了您的需要。对malloc
的调用是不必要的,只会泄漏内存。对free
的最后调用也是不正确的,因为它只会尝试释放NULL
。
您只需要以下内容:
void delete_list(struct node *list)
{
struct node *temp;
while (list != NULL) {
temp = list->next;
free(list);
list = temp;
}
}
这将释放列表中的每个节点,这就是它所需要做的
注意,我将返回类型更改为void
,因为没有理由使用恒定的NULL
返回值,但如果您想返回NULL
,那么这样做很容易