Doubly linked list



  • Hallo, ich sehe den Wald vor lauter Bäumen nicht.
    Meine doubly linked list funktioniert, nur falschrum.
    Sie schiebt elemente immer vor das letzte und nicht ans ende.
    Das "reversen" funktioniert auch schon.Weshalb ich diese Code-Struktur beibehalten mächte/muss.

    Code für add

    void List::insert(int n){
    
    struct Node *curr = new Node;
    
    curr->val = n;
    curr->prev = NULL;
    curr->next=head;
    if(head !=NULL)
    head->prev=curr;
    head=curr;
    }
    

    Kann mir jemand kurz auf die Sprünge helfen? Ich weiß nicht wie ich die Reihenfolge ändern muss.



  • Du fügst es doch selbst am Vorletzten Punkt ein. Sieh dir deinen Code noch mal genau an und den drüber nach.

    void List::insert(int n){
    
         // neue Node erstellen
         struct Node *curr = new Node;
         // Wert auf 0 setzen
         curr->val = n;
         // Vorgänger Node wird NULL
         curr->prev = NULL;
         // nachfolgende Node wird Head ??? Wo kommt head her, was ist head?
         // ich vermude, head ist der letzte Knoten der Liste
         // aber dann wäre eher die Zuweisung von head->next = curr korrekt
         curr->next=head;
    
         if(head !=NULL)
            // aktuelle Node als Vorgänger von head setzen
            head->prev=curr;
         // head auf aktuelle node setzen
         head=curr;
    }
    


  • Falsches Unterforum.



  • Habe es noch nicht gelöst :(.

    Ja head ist der letzte Knoten,in diesem Fall "der erste Knoten" bzw der zuletzt eingefügte.



  • unknown123 schrieb:

    Habe es noch nicht gelöst :(.

    Ja head ist der letzte Knoten,in diesem Fall "der erste Knoten" bzw der zuletzt eingefügte.

    Da dir alleine denken ja scheinbar schwer fällt...

    void List::insert(int n){
    
         // neue Node erstellen
         struct Node *curr = new Node;
         // Wert auf 0 setzen
         curr->val = n;
         // vorgänger auf null setzen
         curr->prev = null;
         // nachfolger auf null setzen
         curr->next = null;
    
         // wenn wir ein Element am Ende haben
         // dann fügen wir den neuen Knoten dahinter an
         if(head != NULL)
         {
            // curr als nachfolger con head setzen
            head->next = curr;
            // head als vorgänger von curr setzen
            curr->prev = head;
         }
    
         // head auf aktuelle node setzen
         head = curr;
    }
    



Anmelden zum Antworten