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

C++链表deleteAtEnd删除尾节点后出现垃圾值问题求助

问题定位

核心bug出在deleteAtEnd方法处理单节点链表的分支:当链表仅剩头节点时,你执行了delete head释放了头节点内存,但没有将head指针置为NULL,此时head变为野指针。后续执行print方法遍历链表时,会访问这个野指针指向的非法内存,最终输出垃圾值。

修复方案

仅需要修改deleteAtEnd方法的单节点处理分支,补充头指针置空的逻辑即可:

void deleteAtEnd(){
    if(head==NULL){
        cout<<"List Is Empty";
        return;
    }
    if(head->next==NULL){
        delete head;
        head = NULL; // 新增该行,避免头指针变为野指针
        return;
    }
    
    Node *temp=head;
    while(temp->next->next!=NULL){
        temp=temp->next;
    }
    Node *todel=temp->next;
    delete todel;
    temp->next=NULL;
}
修复效果

修改后运行你的测试用例:连续插入5个尾部节点、1个头部节点,再连续调用6次deleteAtEnd删除所有节点,最终print方法会正常输出NULL,不会再出现垃圾值。

内容的提问来源于stack exchange,提问作者Naman Verma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:12:03