C++ Verkettete Listen, Verständnisfrage
Hallo,
ich habe neben dem Quellcode Kommentare gemacht. Es wäre schön, wenn jemand drüber schauen könnte, und gucken kann ob ich es richtig verstanden habe. Bei manchen verstehe ich nicht so wirklich was passiert.
Was bedeutet der Anker? Sagt der mir die Position aus?
Ich habe zwei verkettet Listen.
ich habe neben dem Quellcode Kommentare gemacht. Es wäre schön, wenn jemand drüber schauen könnte, und gucken kann ob ich es richtig verstanden habe. Bei manchen verstehe ich nicht so wirklich was passiert.
Was bedeutet der Anker? Sagt der mir die Position aus?
Ich habe zwei verkettet Listen.
void einfuegen(TListenKnoten* &anker, int wert_neu, int vor_wert) {
TListenKnoten *neuer_eintrag = new TListenKnoten; // Lege Listenknoten an mit Pionter auf einen Listenknoten
neuer_eintrag->data = wert_neu; // weise data Objekt den neuen Wert zu
TListenKnoten *ptr = anker; // Setzte anker also startpunkt
while (ptr->data != vor_wert && ptr->next != nullptr) { // Ungleich dem Wert davor, und ist nicht am ende
ptr = ptr->next; // gehe solange weiter
}
if (ptr->next == nullptr) { // Wenn hinten
ptr->next = neuer_eintrag; // was passiert hier?
neuer_eintrag->prev = ptr->prev; // Gehe eins zurück und setze
neuer_eintrag->next = nullptr; // Setze ende
}
if (ptr->next != anker) { // ungleich anker
neuer_eintrag->next = ptr; // der nächste eintrag ist ptr
neuer_eintrag->prev = ptr->prev; // Gehe eins zurück und setze
ptr->prev->next = neuer_eintrag; // was macht das?
}
else { // wenn gleich anker
neuer_eintrag->next = anker; // Anker wird auf nächsten eintrag von Liste 1 gesetzt
anker = neuer_eintrag; // Anker wird gleich Liste 2 gesetzt
ptr->prev = anker; // eintrag davor ist anker
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 327247
Url: https://administrator.de/contentid/327247
Ausgedruckt am: 22.11.2024 um 18:11 Uhr
1 Kommentar
Hallo Protected,
Der Code scheint ja erstmal nicht so schwer verständlich zu sein... (kann mich auch Täuschen)
An dieser Stelle:
Wenn der letzte Eintrag ein nullptr ist, dann verschiebe den ptr einen Eintrag weiter, setze dort (an der Stelle von nullptr) einen neuen Eintrag "ptr->next=neuer_eintrag;" und schiebe die gesamte Liste eins zurück, um Platz für einen neuen nullptr zu schaffen. Setze dann an der nächsten Stelle einen neuen Nullpointer und definiere damit das Ende der Liste.
Da ich leider etwas unter Zeitdruck stehe, kann ich vorerst auf den Rest nicht antworten. Ich werde mich später wieder melden, wenn ich mehr Zeit habe.
Grüße, Mooswitz
Der Code scheint ja erstmal nicht so schwer verständlich zu sein... (kann mich auch Täuschen)
An dieser Stelle:
if (ptr->next == nullptr) { // Wenn hinten
ptr->next = neuer_eintrag; // was passiert hier?
neuer_eintrag->prev = ptr->prev; // Gehe eins zurück und setze
neuer_eintrag->next = nullptr; // Setze ende
}
// was passiert hier?
Da ich leider etwas unter Zeitdruck stehe, kann ich vorerst auf den Rest nicht antworten. Ich werde mich später wieder melden, wenn ich mehr Zeit habe.
Grüße, Mooswitz