faecher:informatik:oberstufe:adt:verkettete_liste:liste_java:insert

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:adt:verkettete_liste:liste_java:insert [20.10.2021 16:36] – [Einfügen eines neuen Elements] sbelfaecher:informatik:oberstufe:adt:verkettete_liste:liste_java:insert [23.11.2023 16:01] (aktuell) Marco Kuemmel
Zeile 1: Zeile 1:
-====== Länge der Liste bestimmen/Neues Element Einfügen  ======+====== Einfügen eines neuen Elements ======
  
-===== Listenlänge =====+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. ((Hier: Aufpassen, dass man ''node2'' nicht "verliert", sonst ist die Liste an dieser Stelle unterbrochen und alle Nachfolger werden von der Garbage Collection entsorgt...))
  
 +{{ :faecher:informatik:oberstufe:adt:verkettete_liste:liste_java:insert.drawio.png?700 |}}
  
-Die Länge der Liste kann man bestimmenindem man sich vom ersten Element zum letzten bewegt und dabei mit einem Zähler die verarbeiteten Elemente mit zählt.+{{:aufgabe.png?nolink  |}} 
 +=== (A1) === 
 +Schreibe als Merksatz stichwortartig niederwas beim Einfügen eines neuen Knotens an Stelle des n-ten vorhandenen Knotens alles passieren mussGibt es Fälle, die gesondert behandelt werden müssen?
  
 ----  ---- 
 {{:aufgabe.png?nolink  |}} {{:aufgabe.png?nolink  |}}
-=== (A1) ===+=== (A2) === 
 + 
 +Implementiere die Methode ''insertAt(index: int, val: T)'', sodass man damit ein neues Element nach dem n-ten  Listenelement einfügen kann. 
  
-  * Implementiere die Methode ''length'' +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 sindWelche Testfälle sind besonders interessant? 
-  * Teste deine Methode mit unterschiedlich langen Listenwelchen Fall solltest du unbedingt testen?+ 
 +//Tipp: Nutze die bereits implementierte Methode ''getNode(index: int): Node''//
  
 ++++ Lösungsvorschlag | ++++ Lösungsvorschlag |
 +
 <code java> <code java>
     /**     /**
-     Gibt die Anzahl der Elemente der Liste zurück +     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()) 
-     * @return   Anzahl der Listenelemente+     * @param val Der einzufügende Wert
      */      */
-    public int length() { +    public void insertAt(int index, T val) {
-        int numElements = 0;+
                  
-        Node<T> first;+        // Der neue Knoten 
 +        Node<T> new_node new Node(val, null);
                  
-        if ( == null) { +        // Wenn der Index Null ist, muss das Element als erster neuer 
-            return numElements+        // 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); 
 +        }        
                  
-        numElements++; 
-         
-        while ( n.getNext() != null ) { 
-            n = n.getNext(); 
-            numElements++; 
-        } 
-         
-        return numElements; 
     }     }
 +    
 </code> </code>
 ++++ ++++
  
-===== Einfügen eines neuen Elements =====+----
  
-Das Einfügen eines neuen Knotens ist im folgenden Objektdiagramm dargestelltMan 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((HierAufpassen, dass man ''node2'' nicht "verliert", sonst ist die Liste an dieser Stelle unterbrochen und alle Nachfolger werden von der Garbage Collection entsorgt...)) +<btn>[[..:liste_java:lengthvalue|<<< Zurück zur Länge und Wert auslesen >>> ]]</btn> **oder** <btn>[[..:liste_java:remove|Weiter zum Löschen >>> ]]</btn>
- +
-{{ :faecher:informatik:oberstufe:adt:verkettete_liste:liste_java:insert.drawio.png?600 |}} +
- +
-{{:aufgabe.png?nolink  |}} +
-=== (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?+
  • faecher/informatik/oberstufe/adt/verkettete_liste/liste_java/insert.1634747807.txt.gz
  • Zuletzt geändert: 20.10.2021 16:36
  • von sbel