Eine verkettete Liste (Linked List) ist eine dynamische Datenstruktur, bei der die Elemente (Knoten) nicht hintereinander im Speicher liegen, sondern über Zeiger (Referenzen) miteinander verbunden sind. Jeder Knoten enthält:
Der erste Knoten wird als Head (Kopf) bezeichnet. Der letzte Knoten zeigt auf null (Ende der Liste).
Bei einer einfach verketteten Liste hat jeder Knoten genau einen Zeiger – auf seinen Nachfolger. Die Liste kann nur in einer Richtung (vorwärts) durchlaufen werden.
// Java-Implementierung
class Knoten<T> {
T daten;
Knoten<T> nächster;
Knoten(T daten) {
this.daten = daten;
this.nächster = null;
}
}
class EinfachVerketteteListe<T> {
private Knoten<T> head;
// Am Anfang einfuegen: O(1)
public void einfuegenVorne(T daten) {
Knoten<T> neu = new Knoten<>(daten);
neu.nächster = head;
head = neu;
}
// Am Ende einfuegen: O(n)
public void einfuegenHinten(T daten) {
Knoten<T> neu = new Knoten<>(daten);
if (head == null) { head = neu; return; }
Knoten<T> aktüll = head;
while (aktüll.nächster != null)
aktüll = aktüll.nächster;
aktüll.nächster = neu;
}
// Erstes Element löschen: O(1)
public T löschenVorne() {
if (head == null) return null;
T daten = head.daten;
head = head.nächster;
return daten;
}
}Bei einer doppelt verketteten Liste hat jeder Knoten zwei Zeiger: einen auf den Nachfolger und einen auf den Vorgänger. Dies ermöglicht das Durchlaufen in beide Richtungen.
class DoppelKnoten<T> {
T daten;
DoppelKnoten<T> nächster;
DoppelKnoten<T> vorheriger;
DoppelKnoten(T daten) {
this.daten = daten;
}
}Vorteile gegenüber der einfach verketteten Liste:
Nachteil: Jeder Knoten benötigt mehr Speicher (zwei Zeiger statt einem).
Abitur-Tipp: Im Abitur wird häufig verlangt, das Einfügen oder Löschen in einer verketteten Liste grafisch darzustellen (Knoten mit Pfeilen). Übe das Umsetzen der Zeiger Schritt für Schritt. Typische Falle: Beim Löschen eines Knotens muss zuerst der Vorgänger aktualisiert werden. Vergiss nicht den Vergleich Array vs. verkettete Liste hinsichtlich Zugriffszeit, Einfüge-/Löschzeit und Speicherverbrauch.