c++ - 删除链表中的节点

标签 c++ linked-list

您好,我正在尝试删除链接列表中的节点。我首先尝试如何删除头节点和尾节点。头部删除似乎有效,但尾部删除不起作用。当我运行代码时,尾部原来所在的位置被垃圾值替换。谁能弄清楚为什么吗?非常感谢!

void CList :: Remove() {

    int data = NULL;

    std::cout<<"Enter value you wish to remove ";
    std:: cin>> data;

    cNode *pMyPointer = m_pHead;

    while (pMyPointer != NULL)
    {
        if (pMyPointer->m_nValue == data) {
            std::cout << "Element found";
            goto del;
        }

        else {
            pMyPointer = pMyPointer->m_pNext;
        }   
    }

    del:

    //removing the head
    if (pMyPointer == m_pHead)
        m_pHead= m_pHead->m_pNext;
    //removing the tail
    else if (pMyPointer == m_pTail)
        m_pTail = m_pTail->m_pPrev;

    delete pMyPointer;
}

最佳答案

考虑node_1指向node_2(只是2节点的情况) 看看这段代码

else if (pMyPointer == m_pTail)
        m_pTail = m_pTail->m_pPrev;

node_1 指向node_2 。它仍然指向那里。一旦删除了node_2,node_1仍将指向node_2(或删除node_2后成为垃圾),因此您必须确保node_1指向NULL。即最后一个但应该指向 null 。

类似的东西

else if (pMyPointer == m_pTail)
    m_pTail->m_pPrev->next=NULL;
    m_pTail = m_pTail->m_pPrev;

关于c++ - 删除链表中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19588077/

相关文章:

c++ - 对转换运算符使用移动语义

c++ - Qt初学者: QPainter widget not rendering

c++ - 制作链表 C++ 深拷贝的函数

java - 使用双链表进行堆栈

c++ - 正确销毁 std::map 中的指针

c++ - Linux - 放弃键盘输入

c# - 如何获取列表中的最后一个元素(尾部)?

c - 冒泡排序双向链表

javascript - 在复选框选择列表中使用链接列表 react native

C++ 多重逻辑运算符