doubly link 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;
    }
    

    Head ist in meinem Fall die letzte Node und somit immer der erste Wert in der Linked List?!
    Kann mir jemand kurz auf die Sprünge helfen? Ich weiß nicht wie ich die Reihenfolge ändern muss.



  • Am besten nimmst Du Bleistift und Papier und zeichnest auf, was passiert.



  • Head ist in meinem Fall die letzte Node
    

    "Kopf" ist ein ungewöhnlicher Name für den letzten Knoten ...



  • theta schrieb:

    Am besten nimmst Du Bleistift und Papier und zeichnest auf, was passiert.

    Ich kriege es einfach nicht hin. Hab ich schon versucht.
    Diese Pointer bringen mich um.


  • Mod

    Wenn du den Vorgänger des alten Elements auf das neue setzt und den Nachfolger des neuen Elements auf das alte, dann ist doch kein Wunder, wenn es hinterher alles von hinten nach vorne geht.



  • Okay, danke habe es gelöst.



  • Ich hätte da noch 2 weitere Hinweise für dich, da du hier im C++-Forum gefragt hast (und nicht im C-Forum):

    1. "NULL" -> in C++ nutzt man besser "nullptr". Das "NULL" funktioniert zwar, aber du könntest z.B. auch mit NULL rechnen. Sowas wie std::cout << NULL + 3 << "\n"; funktioniert! (zumindest bei meinem Compiler, auch wenn eine Warnung erzeugt wird). Wenn du dagegen nullptr verwendest, ist sichergestellt, dass du nicht damit rechnen kannst.

    struct Node *curr = new Node;
    

    In C++ brauchst du das "struct" nicht zu wiederholen. Einfach

    Node *curr = new Node;
    

    oder sogar

    auto curr = new Node;
    


  • Vielen Dank für die Tipps


Anmelden zum Antworten