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; }
-
Hier geht's weiter: https://www.c-plusplus.net/forum/344867