C:如何释放链表中的节点? [英] C: How to free nodes in the linked list?

查看:1011
本文介绍了C:如何释放链表中的节点?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何释放在另一个函数中分配的节点?

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);
    }

}

该函数的作用如下:

  1. 检查head是否为NULL,如果是,则列表为空,我们只返回

  1. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆