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