d0r*_*ife 4 c pointers linked-list data-structures
我正在解决一些指针/链接列表问题.其中一个问题是删除列表中的所有节点并将头指向NULL.
我的解决方案与给定的答案不同.我是新手,所以我无法弄清楚我的是否以及为什么不起作用.我遇到的主要问题是试图了解结果free(*headRef);是什么,以及之后是否*headRef可以共享一个不同的指针.
我的想法是:因为我compliment指向下一个节点,我可以释放*headRef指向第一个节点(或者更一般地说,在一个恭维指向之前的节点).然后,我可以指出*headRef来compliment,这个过程可以继续.
这是我的代码:
void DeleteList(struct node** headRef){
struct node* compliment = *headRef;
while (compliment != NULL){
compliment = compliment->next;
free(*headRef);
*headRef = compliment;
}
*headRef = NULL;
}
Run Code Online (Sandbox Code Playgroud)
假设每个节点都带有两个属性:int和->next指针.
您发布的代码很好.删除所有节点的关键步骤是确保不尝试删除指针然后跟随其next指针.由于您使用compliment指针在每次迭代时保存下一个节点,因此您看起来很好.
至于free(*headRef)- 这解除了指向的指针headRef.一旦你完成了这个,你应该确保不再按照指针*headRef.由于您*headRef在下一行中立即更改为指向链接列表中的下一个节点,因此您无需担心.主要关注的不是free指针,而是尝试解除引用它. free一个指针不会以某种方式"毒害"指针变量并使其变坏; 相反,它会使指针失败并使其变坏.
一个细节 - 函数的最后一行是没有必要的,因为当你访问链表的最后一个节点并遍历它的next指针时,你就会得到NULL.这意味着循环的最终迭代将设置*headRef为指向NULL您.
希望这可以帮助!