删除链表全部节点的函数仅删除首节点,如何修改实现清空链表?
问题原因
- 你的现有函数已经完成了所有链表节点的内存释放操作,核心逻辑没有问题,唯一遗漏的点是:没有将传入的头指针重置为NULL
- 外部调用该函数后,原头指针会变成野指针,指向已经被释放的内存空间,才会出现「仅能删除第一个节点」的错误表现,实际上所有节点的内存都已经被释放了。
修改方案
只需要在循环结束后增加一行把头指针置空的逻辑即可,修改后的完整代码如下:
void deleteList(Node* &pTemp) { Node *pCurrent = pTemp; Node* next = NULL; while(pCurrent != NULL) { next = pCurrent -> nextNode; free(pCurrent); pCurrent = next; } // 新增:将原头指针置空,标记链表为空 pTemp = NULL; }
逻辑说明
因为你定义函数时已经使用了Node* &pTemp的引用传参方式,直接修改pTemp的值会同步作用到外部传入的原头指针变量,调用完该函数后原头指针会变为NULL,符合空链表的标准定义。
内容的提问来源于stack exchange,提问作者GadgetBoy
相关产品推荐
相关产品推荐

