2017-02-04 3 views
1

リンクリストのためにpush_back関数を実装するために次のコードを調べようとしていますが、私にはなぜback_ptr->nextback_ptrが必要ですp。私はback_ptr->nextは、それが仕事のためにちょうどNULLを指し示すことができると私が行方不明であるようにそれを実装する利点はありますか?リンクバックプッシュバック操作で 'バックポインタ'が必要

void LinkedList::push_back(int element) { 
    Node *p = new Node; 
    p->element = elememt; 
    p->next = 0; 
    if (empty()) { 
     front_ptr = back_ptr = p; 
    } else { 
     back_ptr->next = p; 
     back_ptr = p; 
    } 
} 

以下は、LinkedListクラスプロトタイプです。 back_ptrは、コピーコンストラクタを実装するためのリストの最後を指し示すために使用されています(push_backはリストのコピーをもっと簡単にします)。

class LinkedList { 
    void push_back(int element); 
    // other member functions 

    private: 
    struct Node { 
     Node *next; 
     int element; 
    }; 
    Node *front_ptr; 
    Node *back_ptr; 
}; 
+2

front_ptr back_ptr p ↓ ↘ ↓ ┌────┬────┐ ┌────┬────┐ ┌────┬────┐ | #1 |next| → | #2 |next| → | #3 |next| → nullptr └────┴────┘ └────┴────┘ └────┴────┘ 
[リンクリストプッシュバックメンバ関数の実装]の可能な重複(http://stackoverflow.com/questions/39606977/linked- list-pushback-member-function-implementation) –

答えて

1
push_back(1); 
push_back(2); 
Node *p = new Node; 
p->element = 3; 
p->next = nullptr; 
front_ptr  back_ptr   p 
    ↓    ↓    ↓ 
┌────┬────┐ ┌────┬────┐ ┌────┬────┐ 
| #1 |next| → | #2 |next| | #3 |next| → nullptr 
└────┴────┘ └────┴────┘↘ └────┴────┘ 
          nullptr 
back_ptr->next = p; 
front_ptr  back_ptr   p 
    ↓    ↓    ↓ 
┌────┬────┐ ┌────┬────┐ ┌────┬────┐ 
| #1 |next| → | #2 |next| → | #3 |next| → nullptr 
└────┴────┘ └────┴────┘ └────┴────┘ 
back_ptr = p; 
+0

好奇心が強い、あなたはどうやってグラフィックを思いついたのですか? –

+0

@AmitKumar文字と矢印を手動でUnicodeブロックに配置しました。ソースは[更新履歴](http://stackoverflow.com/posts/42037632/revisions)にあります。 (それほど興味深いものではありません) – ephemient

+0

ビジュアルがわかりやすくなりました。私は、 'back_ptr-> next'と' back_ptr'の更新(私は彼らがどんな順序で書かれていたかもしれないと思った)の順序が不足していたと思います。ありがとう! – pinbox

0

私は、リストがバックプッシュの時に空でない場合、現在の尾であるノードが新しいノードにその隣を指している必要があり、最終的に尾が新しいノードを指している必要があります説明しましょう。

 Before push back 
    tail-> node x // tail points to node x 
     x->next = null // as it is tail 
    After push back new node y 
     tail->next = y 
    As x was earlier pointed by tail ,this means x->next = p, 

この手順では、リストが確実に接続されたままになります。

 Finally , point the tail to the new node 
    tail -> y 
関連する問題