Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:informatik:oberstufe:adt:verkettete_liste:liste_java:append [20.10.2021 17:16] – sbel | faecher:informatik:oberstufe:adt:verkettete_liste:liste_java:append [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== 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 '' | ||
- | |||
- | ==== 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 99 | ||
- | while (i < 100) { | ||
- | i++; | ||
- | } | ||
- | // Ende der Zahlenreihe erreicht, i = 99 | ||
- | </ | ||
- | // Knotenzeiger erzeugen, auf first setzen | ||
- | Node< | ||
- | // weitergehen bis zum Ende | ||
- | while(n.getNext()!= null) { | ||
- | n = n.getNext(); | ||
- | } | ||
- | // Jetzt zeigt current auf den letzten Knoten.</ | ||
- | |||
- | **(C)** 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); | ||
- | } | ||
- | | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | ++++ | ||