2016-12-08 7 views
0

pop_back()関数は、二重リンクリストの最後の要素を削除することになっています。しかし、私の現在のコードでは、最後の2つの要素だけが削除されます。私はpop_front()関数をこのように設定しましたが、うまく動作します。私は間違って何をしたのか分かりません。問題はありませんすぐに明らかである場合は、その後、C++二重リンクリスト - 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--; 
    } 
} 

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

のLinkedListのパブリックセクションからマイpop_back()関数:ここ

は、構造体のノードを持つ私のLinkedListヘッダの一部でありますエラーがコードのどこかに埋め込まれている可能性があります。まだ探している。

+0

あなたが共有していることに基づいて何もジャンプしていません。 –

+0

@Ryan関数は間違っていますが、1つのノードだけが削除されます:) :) –

+0

*私はpop_front()関数をこのように設定しました* - これはあなたがこれらの方法に似ていませんリンクリストの問題。あなたは紙に描いたものに基づいて関数を記述します。データと線を表すボックスはリンクを表しています。このロジックが正しい方法を紙に描くことによって実際に動作することを確認せずに 'pop_back'を書いたことがあります。 – PaulMcKenzie

答えて

0

機能は2つのノードを同時に削除しませんが、機能は間違っています。 tail->prevnullptrと等しいかどうかをチェックせず、リストが空になるとheadnullptrを設定しません。関数は次のように見えます。

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

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

     delete nodeToDelete; 
     numElements--; 
    } 
} 
+0

問題は実際にどこかにありました。私のpush_front()は正しく尾を更新していないので、pop_back()はリストに適切に並んでいない尾を使用していました。ありがとう。 – Ryan

+0

@ライアンいいえ。他のコードも間違っていることは明らかでした。 –

関連する問題