C++ 无法删除LinkedList中的节点
我遇到无法从linkedlist中删除节点的问题。我的问题有另一个目的,但我已经将问题缩小到无法删除前一个节点C++ 无法删除LinkedList中的节点,c++,linked-list,nodes,C++,Linked List,Nodes,我遇到无法从linkedlist中删除节点的问题。我的问题有另一个目的,但我已经将问题缩小到无法删除前一个节点 void deleteNodes(LN<T>*& l) { if (l == nullptr) return; LN<T> *temp = nullptr; for (LN<T> *current = l->next, *previous = l; current != nullptr &&
void deleteNodes(LN<T>*& l) {
if (l == nullptr) return;
LN<T> *temp = nullptr;
for (LN<T> *current = l->next, *previous = l; current != nullptr && previous != nullptr; previous = current, current = current->next) {
delete previous;
}
}
无效删除节点(LN*&l){
if(l==nullptr)返回;
LN*temp=nullptr;
对于(LN*current=l->next,*previous=l;current!=nullptr&&previous!=nullptr;previous=current,current=current->next){
删除以前的;
}
}
尝试删除上一个节点会导致程序崩溃错误/无限循环
新更新:如果我删除了“previous=current”并且只删除了前一个循环,我就会得到一个无限循环。为什么要使用for循环中的所有内容 您可以使用简单的代码结构来实现这一点。尝试这种方法,可能是因为代码中给出了for循环
void deleteNodes(LN<T>*& l) {
if (l == nullptr) return;
LN<T> *temp = nullptr;
*previous = l;
for (LN<T> *current = l->next; current != nullptr; current = current->next){
if(previous != nullptr){
previous->next=nullptr;
delete previous;
previous = current;
}
else
break;
}
previous->next=nullptr;
delete previous;
}
无效删除节点(LN*&l){
if(l==nullptr)返回;
LN*temp=nullptr;
*以前的=l;
对于(LN*current=l->next;current!=nullptr;current=current->next){
如果(先前的!=nullptr){
上一个->下一个=nullptr;
删除以前的;
先前=当前;
}
其他的
打破
}
上一个->下一个=nullptr;
删除以前的;
}
My bad,选择了错误的标记思考一下current==nullptr
和previous
不正确的情况。会发生什么情况delete previous
执行?但我认为for循环在nullptr之前停止,因此previous永远不会设置为等于nullptr?LN的析构函数做什么?它是如何处理next
指针的?看起来这段代码似乎删除了列表中的最后一个节点(这是您的意图吗?),然后留下一个悬空的指针,以后肯定会出现问题。我的程序仍然会因为这段代码而崩溃。同样的问题。我添加了std::cout来检查它。我认为在删除节点之前,必须将其下一个指针设置为NULL。我已经更新了代码,请尝试这种方式也。