使用类从双向链接列表中删除节点

时间:2019-03-03 01:45:20

标签: c++

我正在尝试使用类将节点从双向链表中分离出来,但是我不确定如何做到。我已经获得了删除前端的功能,但是再次尝试删除前端时,会遇到分段错误,或者当尝试删除除前端以外的任何其他内容时,该节点仍显示在列表中。任何帮助,将不胜感激。

    void seperate(Node *p){
       if (p->getPrev() == nullptr){  //element being deleted is the front
             front = p->getNext(); //change front to next element
       }
       else{
           ((p->getPrev())->getNext())->setNext(p->getNext());
            }
       if(p->getNext() == nullptr){ //Element being delete is the back
           back = p->getPrev(); //change back pointer to the prev element
       }
       else{
          ((p->getNext())->getPrev())->setNext(p->getPrev());
       }
       p->setNext(nullptr);
       p->setPrev(nullptr);
       size--;
    }

1 个答案:

答案 0 :(得分:0)

我认为这行不太正确:

((p->getPrev())->getNext())->setNext(p->getNext());

尤其是,((p->getPrev())->getNext())总是要求出p的值,这不是您想要的-我相信您正在尝试修改{{之前的节点的下一个指针1}},而不是p本身的下一个指针。

所以我想你想要更多类似的东西:

p

...,您还需要对p->getPrev()->setNext(p->getNext()); 行进行类似的更改。