2017-12-21 19 views
0

リンクリストにノードの再帰挿入を実装して表示するとき、何も得られません。私は問題を解決する方法を理解していません。C++リンクリストの再帰挿入

私のコードは次のとおりです。私は新しいリンクされたリストを作成し、insert関数を呼び出した主な機能は

template <class H> class Node { 
    private: 
     H key; 
     Node <H> *next; 

    public: 
     Node(H key) { 
      this->key = key; 
      next = NULL; 
     } 

     Node(H key, Node <H> * next) { 
      this->key = key; 
      this->next = next; 
     } 

     void setKey(H key) { 
      this->key = key; 
     } 

     void setNext(Node <H> * next) { 
      this->next = next; 
     } 

     H getKey() { 
      return key; 
     } 

     Node <H> *getNext() { 
      return next; 
     }  
}; 

template <class H> class LinkedList { 
    private: 
     Node <H> *header; 

     Node <H> * insertHead(Node <H>* header, H data) 
     { 
      if (header == NULL) 
       return new Node <H>(data); 
      else 
       header->setNext(insertHead(header->getNext(), data)); 

      return header; 
     } 

    public:  
     LinkedList() { 
      header == NULL; 
     } 

     LinkedList <H> *insert(int x) { 
      insertHead(header,x); 
      return this; 
     } 

     void print() { 
      Node <H> *tmp = header; 

      while (tmp != NULL) { 
       cout << tmp->getKey() << " "; 
       tmp = tmp->getNext(); 
      } 
     } 
}; 

int main() { 
    LinkedList <int> *lset = new LinkedList <int>(); 
    lset->insert(89)->insert(56)->insert(8); 
    lset->print();  
} 

。再帰的な挿入に問題があると確信しているので、それを特定できません。

+0

再帰的挿入が表示されません。 – drescherjm

+0

"ノード * insertHead" – Tarek

+0

ノード * insertHead(ノード *ヘッダー、Hデータ)に値渡しするため、ヘッダーは常にnullです。 – drescherjm

答えて

0

問題は、最初のノードを追加した後にルートノードheaderを変更していないことです。 headerは、ノードを追加した後も引き続きヌルでした。修正は

LinkedList <H> *insert(int x) { 
     header = insertHead(header,x); 
     return this; 
    } 

insertHeadから返されたノード()ルートノードであるに

LinkedList <H> *insert(int x) { 
     insertHead(header,x); 
     return this; 
    } 

を変更することです。

関連する問題