c-我的delete_list函数为什么不返回一个空的链表,这是否有一个明显的问题


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,那么这样做很容易

相关内容

  • 没有找到相关文章

最新更新