Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:adt:verkettete_liste:liste_java:append [20.10.2021 15:14] – angelegt sbel | faecher:informatik:oberstufe:adt:verkettete_liste:liste_java:append [11.04.2024 06:10] (aktuell) – Frank Schiebel | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Anhängen eines neuen Listenknotens ====== | ====== Anhängen eines neuen Listenknotens ====== | ||
+ | |||
+ | Beim Anhängen eines weiteren Knotens an die Liste sind zwei Fälle zu unterscheiden: | ||
+ | - Die Liste ist leer | ||
+ | - Die Liste ist nicht leer | ||
+ | |||
+ | ==== Liste leer ==== | ||
+ | |||
+ | |||
+ | Wenn die Liste Leer ist, ist der Vorgang schnell beschrieben, | ||
+ | |||
+ | * Erzeuge eine neuen Knoten mit dem Nachfolger " | ||
+ | * Setze das Attribut first der Liste auf den neuen Knoten | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | {{: | ||
+ | === (A1) " | ||
+ | |||
+ | * Implementiere in der Methode '' | ||
+ | * Teste deine Methode von Hand, indem du eine Liste für Integer Zahlen erzeugst und einen Knoten in die leere Liste einfügst. | ||
+ | * Überprüfe auch, dass deine zuvor implementierte Methode '' | ||
+ | |||
+ | ==== Liste nicht leer ==== | ||
+ | |||
+ | Das folgende Objektdiagramm veranschaulicht die Schritte, die beim Anhängen eines neuen Knotens an eine nicht leere Liste auszuführen sind. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | {{: | ||
+ | === (A2) === | ||
+ | Schreibe als Merksatz stichwortartig nieder, was beim Anhängen eines neuen Knotens alles passieren muss. | ||
+ | |||
+ | ==== Bewegen in der Liste ==== | ||
+ | |||
+ | |||
+ | Ein konkretes Problem stellt sich noch in Schritt 2 des Ablaufs zum Einfügen eines neuen Knotens: Wie können wir uns durch die Liste bewegen, wenn das Listenobjekt selbst nur die Referenz auf den ersten Knoten kennt? | ||
+ | |||
+ | Hier gehen wir ähnlich vor wie bei der Erhöhung einer Zählvariablen: | ||
+ | ^Zähler ^ Liste ^ | ||
+ | |<code java> | ||
+ | // Neuer Zähler | ||
+ | int i=0; | ||
+ | // Zählen bis 100 | ||
+ | while (i < 100) { | ||
+ | i++; | ||
+ | } | ||
+ | // Ende der Zahlenreihe erreicht, i = 100 | ||
+ | </ | ||
+ | // Knotenzeiger erzeugen, auf first setzen | ||
+ | Node< | ||
+ | // weitergehen bis zum Ende | ||
+ | while(n.getNext()!= null) { | ||
+ | n = n.getNext(); | ||
+ | } | ||
+ | // Jetzt zeigt n auf den letzten Knoten.</ | ||
+ | |||
+ | |||
+ | {{: | ||
+ | === (A3) " | ||
+ | |||
+ | Implementiere den zweiten Fall der Methode '' | ||
+ | |||
+ | ++++ Lösungsvorschlag zur Methode " | ||
+ | |||
+ | |||
+ | <code java> | ||
+ | /** | ||
+ | * Hängt einen neuen Wert hinten an die Liste an. | ||
+ | * @param val Der anzuhängende Wert | ||
+ | */ | ||
+ | public void append(T val) { | ||
+ | | ||
+ | // Auf jeden Fall: Neuen Knoten erzeugen | ||
+ | Node< | ||
+ | | ||
+ | // Fall 1: Liste ist leer | ||
+ | if (this.isEmpty()) { | ||
+ | first = new_node; | ||
+ | } else { | ||
+ | //Fall 2: Liste ist nicht leer | ||
+ | // Durch die Liste zum letzten Element wandern | ||
+ | Node< | ||
+ | while(n.getNext() != null) { | ||
+ | n = n.getNext(); | ||
+ | } | ||
+ | n.setNext(new_node); | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ++++ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | < |