2017-12-21 3 views
0

Wenn ich die rekursive Einfügung eines Knotens in die verkettete Liste implementiere und zeige, bekomme ich nichts. Ich verstehe nicht, wie ich das Problem lösen soll.C++ Rekursive Einfügung für eine verkettete Liste

Mein Code ist:

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();  
} 

In der Hauptfunktion habe ich eine neue verlinkte Liste erstellt und aufgerufen dann die Insert-Funktion. Ich bin sicher, dass das Problem in der rekursiven Einfügung ist, deshalb kann ich es nicht identifizieren.

+0

Ich sehe keine rekursive Einfügung. – drescherjm

+0

"Knoten * insertHead" – Tarek

+0

Ihr Problem ist Header ist immer Null, weil Sie übergeben Wert in 'Knoten * insertHead (Knoten * Header, H-Daten) ' – drescherjm

Antwort

0

Das Problem besteht darin, dass Sie den Stammknoten header nach dem Hinzufügen des ersten Knotens nicht ändern. header war nach dem Hinzufügen des Knotens immer noch Null. Die Lösung ist

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

zu

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

Der zurück Knoten aus insertHead() ist der Root-Knoten zu ändern.