C:如何释放链表中的节点? [英] C: How to free nodes in the linked list?
问题描述
如何释放在另一个函数中分配的节点?
How will I free the nodes allocated in another function?
struct node {
int data;
struct node* next;
};
struct node* buildList()
{
struct node* head = NULL;
struct node* second = NULL;
struct node* third = NULL;
head = malloc(sizeof(struct node));
second = malloc(sizeof(struct node));
third = malloc(sizeof(struct node));
head->data = 1;
head->next = second;
second->data = 2;
second->next = third;
third->data = 3;
third->next = NULL;
return head;
}
我在main()中调用buildList函数
I call the buildList function in the main()
int main()
{
struct node* h = buildList();
printf("The second element is %d\n", h->next->data);
return 0;
}
我想释放头,第二和第三个变量.
谢谢.
I want to free head, second and third variables.
Thanks.
更新:
int main()
{
struct node* h = buildList();
printf("The element is %d\n", h->next->data); //prints 2
//free(h->next->next);
//free(h->next);
free(h);
// struct node* h1 = buildList();
printf("The element is %d\n", h->next->data); //print 2 ?? why?
return 0;
}
两个都打印2.不应该调用free(h)删除h.如果是这样,为什么h-> next->数据可用,如果h是免费的.当然,第二"节点不会被释放.但是由于head被移除,因此它应该能够引用下一个元素.这是怎么了
Both prints 2. Shouldn't calling free(h) remove h. If so why is that h->next->data available, if h is free. Ofcourse the 'second' node is not freed. But since head is removed, it should be able to reference the next element. What's the mistake here?
推荐答案
释放列表的迭代函数:
void freeList(struct node* head)
{
struct node* tmp;
while (head != NULL)
{
tmp = head;
head = head->next;
free(tmp);
}
}
该函数的作用如下:
-
检查
head
是否为NULL,如果是,则列表为空,我们只返回
check if
head
is NULL, if yes the list is empty and we just return
将head
保存在tmp
变量中,并使head
指向列表中的下一个节点(这是在head = head->next
Save the head
in a tmp
variable, and make head
point to the next node on your list (this is done in head = head->next
这篇关于C:如何释放链表中的节点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!