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
相关产品推荐
相关产品推荐

