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:insert [20.10.2021 19:21] – [Listenlänge] sbel | faecher:informatik:oberstufe:adt:verkettete_liste:liste_java:insert [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Länge der Liste bestimmen/ | ||
- | ===== Listenlänge ===== | ||
- | |||
- | |||
- | Die Länge der Liste kann man bestimmen, indem man sich vom ersten Element zum letzten bewegt und dabei mit einem Zähler die verarbeiteten Elemente mit zählt. | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A1) === | ||
- | |||
- | * Implementiere die Methode '' | ||
- | * Teste deine Methode mit unterschiedlich langen Listen. welchen Fall solltest du unbedingt testen? | ||
- | |||
- | ++++ Lösungsvorschlag | | ||
- | <code java> | ||
- | /** | ||
- | * Gibt die Anzahl der Elemente der Liste zurück | ||
- | | ||
- | * @return | ||
- | */ | ||
- | public int length() { | ||
- | int numElements = 0; | ||
- | | ||
- | Node< | ||
- | | ||
- | if ( n == null) { | ||
- | return numElements; | ||
- | } | ||
- | | ||
- | numElements++; | ||
- | | ||
- | while ( n.getNext() != null ) { | ||
- | n = n.getNext(); | ||
- | numElements++; | ||
- | } | ||
- | | ||
- | return numElements; | ||
- | } | ||
- | </ | ||
- | ++++ | ||
- | ===== n-ten Wert auslesen ===== | ||
- | |||
- | |||
- | ===== Einfügen eines neuen Elements ===== | ||
- | |||
- | Das Einfügen eines neuen Knotens ist im folgenden Objektdiagramm dargestellt. Man muss beim ändern der Objektreferenzen ('' | ||
- | |||
- | {{ : | ||
- | |||
- | {{: | ||
- | === (A2) === | ||
- | Schreibe als Merksatz stichwortartig nieder, was beim Einfügen eines neuen Knotens nach dem n-ten vorhandenen Knoten alles passieren muss. Gibt es Fälle, die gesondert behandelt werden müssen? | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A3) === | ||
- | |||
- | Implementiere die Methode '' | ||
- | Teste deine Methode, indem du Elemente in eine Liste einfügst und mit dem Objektinspektor überprüfst, | ||
- | |||
- | ++++ Lösungsvorschlag | | ||
- | Kann sicher weiter optimiert werden. | ||
- | <code java> | ||
- | /** | ||
- | * 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< | ||
- | | ||
- | // Wenn der Index groesser als die Laenge ist | ||
- | // passiert nix | ||
- | if (this.length() < index) { | ||
- | return; | ||
- | } | ||
- | |||
- | // Wenn der Index Null ist, muss das Element als erster neuer | ||
- | // Knoten eingefuegt werden | ||
- | if (index == 0) { | ||
- | new_node.setNext(first); | ||
- | first = new_node; | ||
- | return; | ||
- | } | ||
- | // In allen anderen Faellen muss das n-te Element | ||
- | // aufgesucht werden und der neue Knoten dort eingefügt werden. | ||
- | Node< | ||
- | for (int i=1; i<index; i++) { | ||
- | n = n.getNext(); | ||
- | } | ||
- | | ||
- | new_node.setNext(n.getNext()); | ||
- | n.setNext(new_node); | ||
- | | ||
- | } | ||
- | </ | ||
- | ++++ |