2016-03-28 17 views
0

私はテンプレート付きの二重リンクリストを作成しています(練習用です)。二重のリンクリストC++

私はListClassのためのインサート(のconst T & val2Ins)機能を右しようとしています2クラス、ListClass & NodeClass

template < class T > 
class ListClass 
{ 
    private: 
    NodeClass <T> *head; 
    NodeClass <T> *tail; 

    public: 
    //some member functions 
    //my question will deal with the member function called insert(const T &val2Ins 
}; 

template < class T > 
class NodeClass 
{ 
    private: 
    data; 
    NodeClass *next; 
    NodeClass *prev; 

    public: 
    //some member functions (getter functions mostly) 
}; 

を持っています。この関数はある値をとり、昇順にソートします。ヘッドは、最小の値を保持する最初のノードを指します。熱から尾までは昇順である。

私はこれらのポインタで作業して実際にリンクを実行する方法を理解するのに非常に苦労しています。空のリストにノードを挿入するのは簡単ですが、リストにデータが入力されると、ポインタのリンクを実行する方法がわかりません。誰かが私にこれに関するアドバイスをくれますか?

答えて

1

ポインタを使用して頭(または尾)からリストを歩き、データを比較するだけです。

void insert(const T &val2Ins) 
{ 
    using Node = NodeClass<T>; 
    Node *next = head; 

    while(next) 
    { 
     if(val2Ins < next->data) 
     { 
      Node *n = new Node; 
      n->previous = next->previous; 
      n->next = next; 
      next->previous = n; 
      return; 
     } 

     next = next->next; 
    } 

    if(!next) 
    { 
     Node *n = new Node; 
     n->previous = tail; 

     if(tail) 
      tail->next = n; 
     else 
      tail = n; 

     if(!head) 
      head = n; 
    } 
} 
+0

おかげで、残念ながら私は(私の指示に従って)、「友人」を使用することはできません。私はNodeClass友達としてListClassを宣言している(またはプライベートデータメンバーのgetterとsetterを設定する必要があります)を前提としています。 – nm17

+0

NodeClassの関数は、1)NodeClass(NodeClass * inPrev、const T&inVal、NodeClass * inNext)で構成され、前のポインタ、次のポインタ、値をとり現在のノードに割り当てます。 2)T getVal()3)NodeClass * getNextPtr()4)NodeClass * getPrevPtr()5)void setPrevPtrToNull()7)void setBeforeAndAfterPtrs() – nm17

+0

私は次のノードを持っていますか? next = head;その後while(next)。私の問題は、この関数はリストの最初の要素を挿入した後に呼び出されますが、この値を挿入すると、この最初のノードのprev&nextポインタもNULLに設定されます。 while(head)= while(false)= while(temp)? – nm17

関連する問題