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的解决方案时,我的代码似乎有点太多了。 我也是初学者;)