LinkedList add-Methode

baker333

Bekanntes Mitglied
Hi,

ich habe ein Verständnisproblem beim Hinzufügen von Knoten an einer bestimmten Stelle in einer LinkedList (oder ähnlich dazu ist das HInzufügen in einer sortierten Liste). Es handelt sich um eine rekursive Methode, aber ich verstehe nicht so ganz, was passiert, wenn man die Basisfall (steps == 0) erreicht hat. Mit der der "return" Anweisung bei steps == 0 wird doch die gesamte Methode beendet, wie wir dann der restliche Teil der Liste, der nach dem einzufügenden Element kommt "angehängt"?

Danke

Java:
public void add(int index, int value) {
        if ( index < 0 || index > size()) {
            throw new IndexOutOfBoundsException("Der Index liegt außerhalb des korrekten Wertebereichs!");
        }
        this.head = add(this.head, index, value);
    }

private ListNode add(ListNode node, int steps, int value) {
        if (steps == 0) {
            return new ListNode(value, node);
        }
        node.setNext(add(node.getNext(), steps-1, value));
        return node;
    }
 

httpdigest

Top Contributor
Nachdem der "Basisfall" erreicht ist, existieren gerade noch `n` (mit `n` = Länge der Liste) verschachtelte/rekursive Aufrufe, die gerade noch auf das Wiederkehren des tiefsten rekursiven Aufrufs (der, der den Basisfall erreicht hat) warten, um dann ihrerseits mit `node.setNext(...)` weiterzumachen.
 

baker333

Bekanntes Mitglied
Nachdem der "Basisfall" erreicht ist, existieren gerade noch `n` (mit `n` = Länge der Liste) verschachtelte/rekursive Aufrufe, die gerade noch auf das Wiederkehren des tiefsten rekursiven Aufrufs (der, der den Basisfall erreicht hat) warten, um dann ihrerseits mit `node.setNext(...)` weiterzumachen.

Das verstehe ich nicht ganz, wenn der Basisfall (steps == 0) erreicht wurde, wird dann nicht mit "return new ListNode(value, node)" einerseits ein neuer Knoten mit dem entsprechenden Wert erzeugt und eine Referenz auf den Nachfolger gesetzt und dieser Nachfolger hat eine Referenz auf seinen Nachfolger und so weiter?

Also ich gehe die Liste durch und solange der Basisfall nicht erreicht ist, wird die Methode rekursiv aufgerufen (mit steps -1) und die Knoten werden quasi bis dahin "verknüpft".
 

mihe7

Top Contributor
Vielleicht wird es deutlicher, wenn man den Code etwas umschreibt:
Java:
    private ListNode add(ListNode node, int steps, int value) {
        if (steps == 0) {
            return new ListNode(value, node);
        }
        ListNode oldNext = node.getNext();
        ListNode newNext = add(oldNext, steps-1, value);
        node.setNext(newNext);
        return node;
    }
 

httpdigest

Top Contributor
Solange die Abbruchbedingung (dein "Basisfall") nicht erreicht ist, passiert erstmal noch überhaupt gar nichts mit der Liste. Da wird noch nichts umgesetzt, da noch kein rekursiver Aufruf den setNext(...) Aufruf tatsächlich erreicht hat. Jeder rekursive Aufruf steckt noch im Auswerten des Arguments von setNext(...) fest, nämlich add(...).
Und wenn die Abbruchbedingung erreicht ist, ist effektiv immer noch nichts passiert. Erst, wenn der tiefste rekursive Aufruf mit seinem Knoten zurückkehrt, wird die Rekursion quasi aufgerollt/"unwinded" und jeder rekursive Aufruf ruft setNext(...) auf.
 

baker333

Bekanntes Mitglied
Solange die Abbruchbedingung (dein "Basisfall") nicht erreicht ist, passiert erstmal noch überhaupt gar nichts mit der Liste. Da wird noch nichts umgesetzt, da noch kein rekursiver Aufruf den setNext(...) Aufruf tatsächlich erreicht hat. Jeder rekursive Aufruf steckt noch im Auswerten des Arguments von setNext(...) fest, nämlich add(...).
Und wenn die Abbruchbedingung erreicht ist, ist effektiv immer noch nichts passiert. Erst, wenn der tiefste rekursive Aufruf mit seinem Knoten zurückkehrt, wird die Rekursion quasi aufgerollt/"unwinded" und jeder rekursive Aufruf ruft setNext(...) auf.

Was ist denn der "tiefste" rekursive Aufruf? Ich glaube ich bin mir noch nicht so ganz im klaren, wie genau eine rekursive Methode aufgerufen wird.
 

baker333

Bekanntes Mitglied
Also wenn eine Methode eine andere aufruft, dann entsteht doch ein Methodenstapel, also die zuletzt aufgerufene Methode wird ausgeführt. Das ist in meinem Fall der Basisfall (steps == 0), in diesem Schritt wird quasi ein neuer Knoten erstellt und mit seinem Nachfolger verknüpft. Die Methode wird vom Stapel genommen und die Methode darunter wird forgesetzt, die wieder den Vorgänger mit dem neu erstellten Knoten verknüpft usw. Sehe ich das richtig?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Java LinkedList remove Methode Java Basics - Anfänger-Themen 5
R Collections Probleme mit contains()-Methode [LinkedList] Java Basics - Anfänger-Themen 5
K next() und getFirst() Methode in LinkedList Java Basics - Anfänger-Themen 6
megachucky Problem mit LinkedList und der get-Methode Java Basics - Anfänger-Themen 2
A LinkedList implementieren Java Basics - Anfänger-Themen 32
M Wie kann ich den Index i von einer LinkedList überprüfen? Java Basics - Anfänger-Themen 36
Düsseldorf2002 Datentypen Verschachtelte LinkedList Java Basics - Anfänger-Themen 5
Düsseldorf2002 Datentypen Zwei dimensionale LinkedList Java Basics - Anfänger-Themen 8
B Warteschlange erstellen mit LinkedList ? Java Basics - Anfänger-Themen 6
U Objekte in LinkedList löschen und editieren Java Basics - Anfänger-Themen 14
G Java LinkedList Java Basics - Anfänger-Themen 6
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
S Eigene LinkedList Klasse Java Basics - Anfänger-Themen 4
S Mit einer LinkedList vorwärts und rückwärts iterieren Java Basics - Anfänger-Themen 6
S Endlosschleife beim Ausgeben einer LinkedList Java Basics - Anfänger-Themen 2
G Java LinkedList Java Basics - Anfänger-Themen 3
F Windows in LinkedList registrieren Java Basics - Anfänger-Themen 3
A Hilfe, LinkedList Java Basics - Anfänger-Themen 2
H Knoten-Reihenfolge einer LinkedList invertieren Java Basics - Anfänger-Themen 11
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
O Hashmap, ArrayList, LinkedList Java Basics - Anfänger-Themen 7
P Quellcode LinkedList Java Basics - Anfänger-Themen 2
F Collection Aufgabe mit LinkedList Java Basics - Anfänger-Themen 3
N Hilfe bei verknüpfter Liste - Linkedlist Java Basics - Anfänger-Themen 11
P Datentypen LinkedList: Kopie behält Referenz? Java Basics - Anfänger-Themen 3
C ArrayList vs LinkedList vs ? Java Basics - Anfänger-Themen 15
C LinkedList vs. ArrayList Java Basics - Anfänger-Themen 15
O LinkedList zu ArrayList Java Basics - Anfänger-Themen 4
M LinkedList elemente löschen Java Basics - Anfänger-Themen 2
L Problem mit LinkedList Java Basics - Anfänger-Themen 3
F In LinkedList einen Wert ersetzen oder neu einfügen Java Basics - Anfänger-Themen 7
P Hashmap anstatt LinkedList? Java Basics - Anfänger-Themen 6
TechGirl LinkedList - kurze allgemeine Frage Java Basics - Anfänger-Themen 17
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
L LinkedList Comparable < > MEHRFACH implementieren? Java Basics - Anfänger-Themen 3
S LinkedList mit Input vergleichen. Java Basics - Anfänger-Themen 5
C Bei der LinkedList auf Palindrom überprüfen Java Basics - Anfänger-Themen 4
F Element aus LinkedList löschen Java Basics - Anfänger-Themen 3
A LinkedList: Probleme beim Auslesen Java Basics - Anfänger-Themen 2
T Collections LinkedList<LinkedList<T>> - Implementierung Java Basics - Anfänger-Themen 10
S Jfreechart mit LinkedList befüllen Java Basics - Anfänger-Themen 1
S JTable LinkedList <Objekt> befüllen Java Basics - Anfänger-Themen 1
K LinkedList aus Arrays ( Lösungsraum Mastermind ) Java Basics - Anfänger-Themen 5
Z Compiler-Fehler LinkedList Fragen Java Basics - Anfänger-Themen 4
K Methoden Probleme mit LinkedList.remove(object) Java Basics - Anfänger-Themen 1
Farbenfroh int in LinkedList einsortieren Java Basics - Anfänger-Themen 4
W Klassen LinkedList funktioniert nicht Java Basics - Anfänger-Themen 6
X LinkedList - Index eines Objekts Java Basics - Anfänger-Themen 2
S Strings in eine LinkedList schreiben und auslesen? Java Basics - Anfänger-Themen 4
D Sortieren von int Werten von Objekten in einer LinkedList, kann nicht auf int Werte zugreifen Java Basics - Anfänger-Themen 3
F Eigene LinkedList - toString Java Basics - Anfänger-Themen 10
T Datentypen gleichmäßiges mischen von 2 LinkedList Java Basics - Anfänger-Themen 3
S Dateien/LinkedList/StringBuffer - SOrtierung klappt nicht so ganz Java Basics - Anfänger-Themen 2
J Datentypen Array von einer LinkedList Java Basics - Anfänger-Themen 5
R LinkedList Java Basics - Anfänger-Themen 8
J Per I/O Streams in LinkedList oder ArrayList schreiben/lesen Java Basics - Anfänger-Themen 6
B LinkedList remove Java Basics - Anfänger-Themen 5
J statische Methoden auf eine LinkedList initialisieren? Java Basics - Anfänger-Themen 5
G Hausaufgabe mit LinkedList und LinkedListStack verstehen Java Basics - Anfänger-Themen 6
N LinkedList-checkForComodification Java Basics - Anfänger-Themen 11
N LinkedList Java Basics - Anfänger-Themen 17
P LinkedList sortieren Java Basics - Anfänger-Themen 20
P LinkedList - Stack ... grundlegende Frage Java Basics - Anfänger-Themen 5
Z Erste Schritte LinkedList Werte abfragen und vergleichen Java Basics - Anfänger-Themen 3
B SUCHE: Threadsafe LinkedList Java Basics - Anfänger-Themen 10
Binary.Coder Wie linkedlist für Djikstra nutzen? Java Basics - Anfänger-Themen 6
M Arrays in LinkedList Java Basics - Anfänger-Themen 4
G Collections.binarySearch(LinkedList): cannot find method Java Basics - Anfänger-Themen 6
M LinkedList aktuelle position Java Basics - Anfänger-Themen 3
G Frage zu LinkedList Java Basics - Anfänger-Themen 15
H Dynamische Bindung mit Interfaces und LinkedList Java Basics - Anfänger-Themen 7
I LinkedLIst / ArrayList Konstruktor Java Basics - Anfänger-Themen 4
B Collections RandomAccessfile & Linkedlist Java Basics - Anfänger-Themen 4
S Speichermangel ArrayList/LinkedList Java Basics - Anfänger-Themen 3
V LinkedList size() Java Basics - Anfänger-Themen 2
darekkay Datentypen HashSet bzw. LinkedList mit Werten initialisieren Java Basics - Anfänger-Themen 3
D Probleme mit LinkedList Java Basics - Anfänger-Themen 6
L LinkedList vorgänger Knoten zurück geben Java Basics - Anfänger-Themen 4
S LinkedList indexOf() - geht des irgendwie schneller? Java Basics - Anfänger-Themen 23
S LinkedList<String[]> filtern und sortieren Java Basics - Anfänger-Themen 9
W LinkedList Java Basics - Anfänger-Themen 12
S Frage zum speichern der Daten in einer LinkedList Java Basics - Anfänger-Themen 2
D Fenster in LinkedList verwalten Java Basics - Anfänger-Themen 2
C HashMap mit LinkedList Java Basics - Anfänger-Themen 5
S Datentypen LinkedList Konstruktor, add Alternative Java Basics - Anfänger-Themen 2
truesoul LinkedList Problem Java Basics - Anfänger-Themen 6
M Java Generics LinkedList Java Basics - Anfänger-Themen 5
H LinkedList Element an Stelle x ausgeben? Java Basics - Anfänger-Themen 5
D LinkedList aufrufe Java Basics - Anfänger-Themen 3
S Problem mit ObjectInputStream beim Einlesen von LinkedList Java Basics - Anfänger-Themen 3
S Serialized LinkedList aus Datei Laden Java Basics - Anfänger-Themen 15
S LinkedList Java Basics - Anfänger-Themen 2
M LinkedList in anderer Klasse nutzen Java Basics - Anfänger-Themen 4
L LinkedList sortieren Java Basics - Anfänger-Themen 5
L heap space, LinkedList umspeichern Java Basics - Anfänger-Themen 15
H LinkedList mit Strings Exception Java Basics - Anfänger-Themen 3
S IndexOutofBoundsException bei linkedlist Java Basics - Anfänger-Themen 5
B Fehlersuche bei LinkedList Java Basics - Anfänger-Themen 3
B LinkedList - Berechnung des Produkts Java Basics - Anfänger-Themen 6
S Sortierte LinkedList nach Variablen durchsuchen und nicht nach INDEX Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben