Rekursion mit einer verketteten Liste
-
Hi,
hat mir jemand vielleicht einen Einfall wie ich es schaffen könnte das Ende der Liste sofort bei der Methode Anhaengen() zu erreichen.
Damit das Programm nicht immer wieder das Ende suchen muss.
-
Nun, bei deinem jetzigen Design bleibt dir nur eine Alternative.. und zwar die iterative Vorgehensweise
Das unterscheidet sich aber im Ergebnis nicht großartig von dem, was du jetzt rekursiv machst.
(Edit: Du kannst natürlich in der "Anhängen"-Methode auch das neu erzeugte Listenelement zurückgeben.. dann hast du in deiner Schleife immer das zuletzt erzeugte Element. Oh, und "naechster = null;" in SetDaten ist auch etwas unpraktisch. Was ist, wenn du mal die Daten eines Elements in der Mitte ändern willst?)Als weiterer Ansatz sei dir genannt, eine Klasse "Liste" zu schreiben, die zwei Member hat: "Listenelement erstes, letztes;". Dann kommst du schnell an das erste und das letzte Element ran.
-
Danke für deine schnelle Antwort
Also ich habe jetzt schon sehr viel rumprobiert und komm einfach nicht daraufWie schaffe ich es dass die "Anhaengen" Methode das neu erzeugte Listenelement zurückgibt?
Ich wäre für eine Antwort sehr dankbar, da ich nun schon 2 Tage an der Aufgabe sitze und auch noch die Liste Rückwärts wieder ausgeben soll.
-
RealFeejay schrieb:
Wie schaffe ich es dass die "Anhaengen" Methode das neu erzeugte Listenelement zurückgibt?
Du musst dazu die Methode so ändern:
//die Methode zum Anhängen eines neuen Elements //sie ruft sich rekursiv auf, bis das Ende erreicht ist public Listenelement Anhaengen(string datenNeu) { //wenn das Ende erreicht ist, ein neues Element erzeugen if (naechster == null) { naechster = new Listenelement(); naechster.SetDaten(datenNeu); } //sonst ruft sich die Methode selbst wieder auf else naechster.Anhaengen(datenNeu); //zur Veranschaulichung der Rekursion //Console.WriteLine("Daten {0} wurden eingefügt.", datenNeu); return naechster; }
Und die main-Methode geht dann so:
... //weitere Elemente in einer Schleife anfügen Listenelement neuestesElement = listenAnfang; for (int element = 1; element < 10; element++) { neuestesElement = neuestesElement.Anhaengen("Element " + element); } ...
Damit läuft die Methode Anhaengen nie in den else-Zweig rein und hängt die neuen Daten sofort an.
Ich wäre für eine Antwort sehr dankbar, da ich nun schon 2 Tage an der Aufgabe sitze und auch noch die Liste Rückwärts wieder ausgeben soll.
Rückwärts? Dann brauchst du aber noch einen Verweis auf das vorherige Element
-
Oh sehr vielen dank. Funktioniert wirklich gut
Kannst du mir noch sagen wie ich den Verweis auf das vorherige Element bekomme?
Leider steht in dem Heft, dass ich gerade abarbeite, nicht sehr viele Beispiele dazu
-
Klar könnte ich, aber du sollst ja auch noch bisserl was machen
Auf Wikipedia kannst du z.B. mal nach "Doppelt verkettete Liste" suchen. Das ist nämlich das, was du brauchst.
-
Ok sehr vielen dank.
Ich suche schon seit ner weile nach einem Link wo ich mehr dazu lesen kannEdit
Habs geschafft und es war nicht einmal so schwer