簡體   English   中英

C ++雙鏈表-使用pop_back()從尾部刪除元素

[英]C++ Doubly linked list - deleting element from the tail using pop_back()

我的pop_back()函數應該刪除雙向鏈表中的最后一個元素。 但是,我當前的代碼刪除了最后兩個元素,而不僅僅是一個。 我已經設置了類似於此函數的pop_front()函數,效果很好。 我無法弄清楚自己做錯了什么。

這是我的帶有結構節點的鏈表頭的一部分:

class linkedlist
{
private:
    struct Node{
        Node* next;
        Node* prev;
        element_type data;
    };
    Node* head;
    Node* tail;
    unsigned int numElements;

我來自鏈表的公共部分的pop_back()函數:

void linkedlist::pop_back()
{
    if (empty())
        return;
    else {
        Node *delBack = tail;
        Node *nodeToDelete = delBack;
        delBack = delBack->prev;
        delBack->next = NULL;
        delete nodeToDelete;
        tail = delBack;
        numElements--;
    }
}

如果問題不是立即顯而易見的,則可能是該錯誤掩埋在代碼的其他位置。 仍在搜索中。

盡管該功能不能同時刪除兩個節點,但是該功能是錯誤的。 它不會檢查tail->prev是否等於nullptr並且在列表為空時也不會將head設置為nullptr 該函數可以如下所示。

void linkedlist::pop_back()
{
    if ( tail )
    {
        Node *nodeToDelete = tail;
        tail = tail->prev;

        if ( tail )
        {
            tail->next = nullptr;
        }
        else
        {
            head = nullptr;
        }

        delete nodeToDelete;
        numElements--;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM