Pointer-Werkstatt

Liste, ohne Knoten zu verlieren

09 / 17

Mission

Implementiere die fehlenden Listenfunktionen auf Papier. Dein Sicherheitsgesetz: Erst den Restweg sichern, dann head verändern.

struct liste_node {
    int ele;
    liste_node* next;
};
struct liste {
    liste_node* head;
    size_t len;
};

Ein Symbol übersetzen

lis->head->next bedeutet …

-> heißt: „Gehe zu dem Objekt, auf das der Zeiger zeigt, und nimm sein Feld …“
lis → head führt zum ersten Knoten; dessen Feld next führt zum zweiten Knoten.

Den Restweg retten

Die Liste ist 7 → 18 → 43 → null. Du willst den ersten Knoten löschen. Klicke die Codezeilen in sicherer Reihenfolge.

head
7next
→
18next
→
43next
→ null
  1. Noch keine Zeile ausgeführt.

Liste direkt manipulieren

Arbeite wie im main: Führe die Operationen aus und beobachte, welche Pointer sich ändern.

Start: head = nullptr, len = 0.

Nach diesen vier Aufrufen: Welche Zeile implementiert pushfront(lis, t) ohne die Restliste zu verlieren?

Kernfunktionen zusammensetzen

Wähle jeweils die mechanisch passende Zeile. Es geht um eine tiefe Kopie: neue Knoten, gleiche Werte.

Bei clear darfst du nach delete head nicht mehr head->next lesen. Sichere oder verschiebe den Zeiger zuerst.
Bei tiefer Kopie werden keine Knotenzeiger geteilt. src wird nur gelesen; für dst entsteht pro Quellknoten ein new.

Prüfungs-Trace aus dem Original

lis ist nach dem Erhöhen [7 18 43 667]. lisb und lisc sind tiefe Kopien. Danach:

liste_append(&lis, &lisb);       // Ausgabe 5
liste_clear(&lis);
lis = liste_plus(&lisc, &lisc); // Ausgabe 6

Prüfungsabschluss

Du hast Pointerbewegung und Listen-Trace produziert. Jetzt darfst du den vollständigen Musterweg mit allen geforderten Funktionen vergleichen.