Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法删除LinkedList中的节点_C++_Linked List_Nodes - Fatal编程技术网

C++ 无法删除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 &&

我遇到无法从linkedlist中删除节点的问题。我的问题有另一个目的,但我已经将问题缩小到无法删除前一个节点

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。我已经更新了代码,请尝试这种方式也。