嘿,我已经用list类和内部节点结构在c++中构建了一个链表的实现。除了从尾部功能中删除节点之外,一切都很好:
void List::remove_tail()
{
Node* runPtr= new Node;
runPtr = this->head;
while(runPtr->next->next !=nullptr) //this loop is not stopping!
{
runPtr = runPtr->next;
}
this->tail= runPtr;
delete runPtr;
}
由于某种原因while循环没有停止。我错过了什么?
谢谢你的帮助!
- 不要为
runPtr
分配新节点。它是一个指针,应该指向列表中已经分配的元素。你只是在泄露记忆 - 在未验证指针是否为null的情况下,不要取消引用指针。
runPtr
可能为空,runPtr->next
也可能为空。在这两种情况下,您都将执行未经授权的内存访问,并导致崩溃或垃圾 - 在尝试迭代列表之前,必须初始化指向第一个元素(或null(的
head
指针 - 不更新尾部前面的元素的
next
指针。在第一次删除后,这将导致一个列表不会停止为null