You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除链表全部节点的函数仅删除首节点,如何修改实现清空链表?

问题原因

  • 你的现有函数已经完成了所有链表节点的内存释放操作,核心逻辑没有问题,唯一遗漏的点是:没有将传入的头指针重置为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:36:04