C链表清单function

我正在努力学习C,而且和很多人一样,我一直有点困难。 无论如何,我做了一个递归函数来销毁我的链表,但是当我调试时,当我从函数返回时,列表的头部不应该是空的,所以我猜它是一些基本的误解指针。 这是function:

void destroy(struct node* n){ if(!n) return; destroy(n->next); free(n); n = NULL; } 

提前致谢。

 void deleteList(struct node** head_ref) { struct node* current = *head_ref; struct node* next; while (current != NULL) { next = current->next; free(current); current = next; } *head_ref = NULL; } 

尝试这样….你可以根据需要更改名称。 如果您仍需要帮助,请告诉我。

当函数结束时头被释放但它不是空的。 C中的所有内容都按值传递。 所以你将头部位置的副本传递给destroy。 该内存被释放,但头部没有改变。

你可以这样写:

 destroy(&head); void destroy(struct node** n){ if(!*n) return; destroy(&((*n)->next)); free(*n); *n = NULL; } 

您必须使用指向列表的指针,使用destroy(&n)调用:

 /* clear complete list */ void destroy(struct node **n) { if (*n== NULL) return; if ((*n)->next == NULL) { free(*n); *n= NULL; } else { struct node *iter = *n; struct node *prev = NULL; /* get last item and previous one */ while (iter->next != NULL) { prev = iter; iter = iter->next; } prev->next = NULL; free(iter); /* repeat call */ clear(n); } } 

希望这可以帮到你。

当我看到spt025的解决方案时,我的代码似乎有点太多了。 我也是初学者;)