Einfach verkette Liste mit Objekten
-
Hallo,
hab da mal eine Frage.
Kann man eine einfach verkette Liste mit Objekten auch rückwärts auslesen?
Die Aufgabenstellung ist aber, aus der einfach verketten Liste keine doppelt verkette Liste zumachen.
Ist für die Schule.
Hat da jemand eine Antwort drauf und wenn ja. Welche?Vielen Dank schon mal.
Doug_HH
-
ja, ist aber umständlich.
Du gehst an den Anfang deiner Liste, merkst dir aber das "aktuelle" Element, auf dem du stehst.
Nehmen wir die Liste
A -> B -> C -> D -> E ^
Du bist bei D und willst das Element davor (also C), kannst eigentlich aber nur zu E.
Also gehst du zu A, merkst dir aber den Verweis zu D.
Dann gehst du die Liste solange durch, bis der Nachfolger des Elements, auf dem du momentan bist, D ist.
Nur C zeigt auf D, also bist du nun vor D.Ist aber sehr umständlich
Bzw. ist die Erklärung evtl. sehr verwirrend. Wer weiß, wie es gemeint ist, versteht's aber
-
Natürlich kann man eine *einfach* verkettete Liste nur in *eine* Richtung durchlaufen...
-
Danke "some_dudess", ich weiß dass es kompliziert ist.
Nur die Aufgabe kommt von der Schule.
Kein Schimmer was die uns damit beibringen wollen.Hi Jochen, dass ist ja meine Befürchtung das ich das nicht hinbekomme.
Kann auch gerne mal den Code posten.Glaub mir, sitze schon ein paar Tage davor und kriege es einfach nicht auf den Schirm was die von mir wollen.
-
Du musst einfach die Liste durchlaufen, bis zu dem Eintrag, wo Du kennst. Und dann mitzählen wie weit Du gelaufen bist (idx).
Jetzt läufst Du die Liste einfach nochmals durch und läufst bis "idx-1"! Dann bist Du beim vorgänger...Oder (effektiver):
Du läufst die Liste durch und merkst Dir immer noch den Vorgänger. Wenn Du dann beim passenden Eintrag bist gibst Du einfach den Vorgänger zurück... ist somit auch O(n)
-
Ach so.. rückwärts auslesen...
Das geht natürlich nicht so einfach...
Am einfachsten (bzw. ohne unnötigen Speicherbedarf) geht dies durch die "Zähl-1 Methode).
-
Hier ist der Code...
Doug_HH
-
Setze in der ausgeben Methode einfach das WriteLine unter den if Block. Dann wird jedes Objekt erst ausgegeben, wenn die Rekursion beendet ist.
void listenelement::ausgeben() { //wenn das Ende nicht erreicht ist, die Methode für next erneut aufrufen if (next != nullptr) { next->ausgeben(); } Console::WriteLine("{0}",daten); }
-
Danke Erbse199 mit Dir kann man zusammen schaffe.
Supi funzt und ist so einfach.
Thx
-
Hi Erbse199,
hoffe Du bist noch am Start?
Kannst Du mir das bitte erklären warum das funzt.
Also wenn man das debuggt dann sieht man, dass er nie nullptr erreicht.
Aber warum er dann exakt „Element 2“, „Element 1“ und „Element 0“ ausgibt,
habe ich nicht verstanden.
Weder die Reihenfolge noch wo er das Zwischenspeichert.
Kannst Du mir das mal so ein büschen in den Kopf klopfen.Gruß Doug_HH
-
Kann mir keiner das erklären, warum das so ist?