C-Programmierung
Knoten aus Liste Löschen
← Knoten in Liste Suchen | ● | Doppelt Verkettete Listen →
Einzelne Arbeitsschritte:
- Falls der zu löschende Knoten die Wurzel ist:
- Wurzel auf Nachfolger-Knoten des zu löschenden Knotens setzen
- Sonst:
- Nachfolger-Zeiger des Vorgänger-Knotens auf den Nachfolger-Zeiger des zu löschenden Knotens setzen
- Speicher von zu löschendem Knoten freigeben
----- ----- ----- ----- root --> |d|n| --> |d|n| --> |d|n| --> |d|n| --> null ----- ----- ----- -----
Fall 1:
free | ----- ----- ----- ----- root |d|n| |d|n| --> |d|n| --> |d|n| --> null | ----- ----- ----- ----- | ^ \_______________/
Fall 2:
free | ----- ----- ----- ----- root --> |d|n| |d|n| |d|n| --> |d|n| --> null ----- ----- ----- ----- | ^ \________________/
Problem: Wie ermittelt man den Vorgängerknoten? Es gibt keinen direkten Weg zurück, nur den verketteten Weg von der Wurzel.
Nachteil: Suche nach Vorgänger-Element kostet Zeit.
Lösung: Doppelt verkettete Listen.