0

私の pop_back() 関数は、二重にリンクされたリストの最後の要素を削除することになっています。ただし、現在のコードでは、 1 つだけではなく最後の2 つの要素が削除されます。これに似た 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--;
    }
}

問題がすぐに明らかにならない場合は、エラーがコードの別の場所に埋め込まれている可能性があります。まだ探している。

4

1 に答える 1

2

関数は2つのノードを同時に削除しませんが、関数は間違っています。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--;
    }
}
于 2016-12-08T01:23:15.670 に答える