如何在C语言中删除链表



我正在尝试用以下def创建c中的链表:

/**
 * The definition of node and linked list.
 */
typedef struct _node{
    void * val;
    struct _node * next;
} node;
typedef struct{
    node * head;
} linkedlist;

我有一个函数可以完全删除它(不是单个节点,而是整个列表):

void clean_list(linkedlist * ll){
    node * temp;
    curr = ll->head;
    while(ll->curr->next != NULL){
    temp = curr;
    curr = curr->next;
    free(temp->val);
    free(temp);
    }
}
我的问题是:
  • 它工作吗?
  • 我怎么知道它是否实际工作?

我在MacBook Pro上工作,并使用gcc作为编译器。

我永远无法理解为什么那些拥有可编译代码的人会发布无法编译的代码。但是,假设需要释放linkedlist本身,下面是我处理它的方法(未经测试):

void clean_list(linkedlist *pll)
{
    node *pnext;
    for (node *pnode = pll->head; pnode != NULL; pnode = pnext)
    {
        pnext = pnode->next;
        free(pnode->val);
        free(pnode);
    }
    free(pll);
}
void clean_list(linkedlist * ll){
    node *temp, **ppp;
    for (ppp= &ll->head; temp = *ppp;   ){
      *ppp = temp->next;
      free(temp->val);
      free(temp);
      }
}

相关内容

  • 没有找到相关文章

最新更新