Einfügen eines neuen Elements

Das Einfügen eines neuen Knotens ist im folgenden Objektdiagramm dargestellt. Man muss beim Ändern der Objektreferenzen (nextNode) darauf achten, dass die Reihenfolge stimmt und man die Referenz auf den ursprünglichen Nachfolger des Knotens, hinter dem der neue Knoten eingefügt wird nicht verliert. 1) Hier: Aufpassen, dass man node2 nicht "verliert", sonst ist die Liste an dieser Stelle unterbrochen und alle Nachfolger werden von der Garbage Collection entsorgt…

(A1)

Schreibe als Merksatz stichwortartig nieder, was beim Einfügen eines neuen Knotens an Stelle des n-ten vorhandenen Knotens alles passieren muss. Gibt es Fälle, die gesondert behandelt werden müssen?

(A2)

Implementiere die Methode insertAt(index: int, val: T), sodass man damit ein neues Element nach dem n-ten Listenelement einfügen kann.

Teste deine Methode, indem du Elemente in eine Liste einfügst und mit dem Objektinspektor überprüfst, dass das neue Element an der richtigen Stelle eingefügt wurde - und dass die nachfolgenden Knoten noch erreichbar sind. Welche Testfälle sind besonders interessant?

Tipp: Nutze die bereits implementierte Methode getNode(index: int): Node

Lösungsvorschlag

/** * Fügt einen neuen Wert an einer gewünschten Stelle in der Liste ein. * @param index Die Stelle, an der der neue Wert stehen soll (0 <= index <= laenge()) * @param val Der einzufügende Wert */ public void insertAt(int index, T val) { // Der neue Knoten Node<T> new_node = new Node(val, null); // Wenn der Index Null ist, muss das Element als erster neuer // Knoten eingefuegt werden if (index == 0) { new_node.setNext(first); first = new_node; } else { Node<T> n = this.getNode(index-1); new_node.setNext(n.getNext()); n.setNext(new_node); } }

<<< Zurück zur Länge und Wert auslesen >>> oder Weiter zum Löschen >>>