Mit Referenzen verkettet Listen.

JavaStarterr

Mitglied
Moin Zusammen,

Ich Versuche in einer Liste auf ein bestimmten Index zuzugreifen. Scheitere aber an der Frage, wie man das rekursiv gestalten kann.
Wäre dankbar für ein Beispiel.
Das Problem ist die Methode hat nur den Index als Parameter und ich dachte man könnte mit einem counter arbeiten, dieser muss aber in der Methode initialisiert, wodurch er bei rekursiven Aufrufen immer wieder zurückgesetzt wird.

Danke
 
/**
* Methode liefert die Anzahl der enthaltenen Wegepunkte.
*
* @param counter
* @Return
*/
public int getNoOfWaypoints(int counter) {
if (this.hasNext()) {
counter++;
this.getNext().getNoOfWaypoints(counter);
}
return counter;
}

Wie mache ich das denn hier, ich muss ja den Counter initialisieren, aber wenn ich die Methode wieder aufrufe setzt sich der Counter ja wieder zurück?
 
Das wäre meine Lösung gewesen:

/**
* Methode, welche den Wegepunkt an Stelle Index aus der Liste zurückgibt
* @param index
* @Return
*/
public Waypoint getWaypointAt(int index) {
if (index == 0) {
return this.Waypoint;
}
if (index >= 0 && this.hasNext() && index < this.getNoOfWaypoints()) {
this.next.getWaypointAt(index - 1);
}

return null;

}

würde das so hinhauen ?
 
Wie mache ich das denn hier, ich muss ja den Counter initialisieren, aber wenn ich die Methode wieder aufrufe setzt sich der Counter ja wieder zurück?
Du brauchst keinen counter. Jedes Element einer verketteten Liste ist selbst Kopf einer verketten Liste (rekursive Eigenschaft).

Java:
public int getNoOfWaypoints() {
    if (!this.hasNext()) { // es gibt kein weiteres Element
        return 1; // dann besteht die Liste nur aus dem aktuellen Element.
    } else { // es gibt weitere Elemente
        // dann ist das nächste Element Kopf einer Liste
        // und next().getNoOfWaypoints() liefert die
        // Anzahl der Elemente in dieser Liste
        // Hinzu kommt noch das aktuelle Element
        return 1 + next().getNoOfWaypoints();
    }
}

Wenn Eure verkettete Liste auch leer sein kann, muss der Fall natürlich noch abgefangen werden.
 

Zurück
Oben