C 双重链接列表 - 使用pop_back()从尾部删除元素



我的pop_back()函数应该删除双链接列表中的最后一个元素。但是,我当前的代码删除了最后一个两个元素,而不仅仅是一个。我已经设置了与此功能相似的pop_front()函数,该功能正常。我很难弄清楚自己做错了什么。

这是我的linkedlist标题的一部分,带有struct节点:

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

我的pop_back()函数来自linkedlist的公共部分:

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

最新更新