清除链接结构中的每个节点

时间:2014-08-30 22:55:46

标签: c pointers struct nodes

我被困在这里。 你能帮我么? 我似乎无法实现这个功能“freeThis”。 我试图释放链表中的节点。

结构

struct node {
    unsigned x;
    double y;
    struct node *next;
};
typedef struct node Nodes, *This;

宣布职能

void freeThis(This *);

实现功能

void freeThis(This *head)
{
   This * tmp;

   while (head != NULL)
    {
       tmp = head;

       *head = *head->next; /*error is here I think */

       free(tmp);
    }

}

UPDATE!

当有一个像这样声明的函数时

void freeNodes(Nodes *);

像这样实施

void freeNodes(Nodes *a)

    {
        free(a);
        printf(“sucess”);
    }

我将如何使用此功能?

喜欢这个?

freeNodes(*tmp);

3 个答案:

答案 0 :(得分:1)

This是指针类型:typedef struct node Nodes, *This;

请注意,您不需要指针指针,单个指针就足够了,所以更改:

void freeThis(This *head) /* head is a pointer to pointer */
{
   This * tmp;

void freeThis(This head)
{
   This tmp;

   *head = *head->next;

   head = head->next;

答案 1 :(得分:1)

是的,问题在于:

*head = *head->next; 

这是因为运营商优先。 - >先评估,然后评估*。

尝试

*head = (*head)->next;

更新:

如果您已将temp声明为

Nodes * temp 

然后调用函数

freeNodes(temp)

答案 2 :(得分:0)

您也可以试试这个......

  void freeThis(Nodes **head)
  {
    Nodes *tmp;

    while (*head)
    {
      tmp = *head;/*first node to be delete*/
      *head = *head->next;/*2nd node is updated as headpointer*/
      free(tmp);/* freeing first node & here you can call your freeNodes function...*/
     }

 }