2

こんにちは、リンクされたリストのノードを削除しようとしています。私は最初に頭と尾のノードを削除する方法を実験しています。頭の削除は機能しているように見えますが、尾の削除は機能していません。コードを実行すると、末尾があった場所がガベージ値に置き換えられます。誰でも理由を理解できますか?どうもありがとう!

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;
}
4

4 に答える 4

1

この発言で

 while (pMyPointer != NULL)

ループを終了するときにポインターが NULL を指している可能性があるため、テールポインターをスキップします。

代わりに試してください

while (pMyPointer->m_pNext != NULL)

また、最後から 2 番目のノードが NULL を指すようにする必要があります。

else if (pMyPointer == m_pTail) {
  m_pTail = m_pTail->m_pPrev;
  m_pTail->m_pNext = NULL;
}
delete pMyPointer;

また、代わりにgoto del、単に使用しますbreak;

于 2013-10-25T11:16:11.833 に答える
0

削除するノードの 1 つ前のノードに留まる

于 2013-10-25T11:05:55.423 に答える