-1

我正在尝试使用以下定义在 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 作为编译器。

4

2 回答 2

2

我永远不会明白为什么拥有可编译代码的人会发布无法编译的代码。但是,假设需要释放链表本身,这就是我的处理方法(未经测试):

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);
}
于 2013-01-05T18:16:16.557 回答
0
void clean_list(linkedlist * ll){
    node *temp, **ppp;

    for (ppp= &ll->head; temp = *ppp;   ){
      *ppp = temp->next;
      free(temp->val);
      free(temp);
      }
}
于 2013-01-05T18:23:04.947 回答