PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einfach verkettete Liste ... Element suchen und löschen



AureusPhoenix
16-02-2011, 17:38
Hi Leute,
ich hab ein kleines Problem. Und zwar möchte ich in einer einfach verketteten Liste ein Element eines bestimmten Inhalts suchen und löschen. Dazu hatte ich mir überlegt ne rekursive Funktion zu schreiben.
Leider funktioniert das irgendwie nicht.



struct knot
{
string text;
knot *child;
};

void del(knot *root, string to_delete)
{
if (root->child == NULL || root==NULL) return;
//if (root->text == to_delete) root->child = root->child->child;
del(root->child, to_delete);
}


Ich hab die mittlere Zeile schonmal auskommentiert, weil ich nicht weis, ob ich die so schreiben darf. Aber auch so bekomm ich schon nen Speicherzugriffsfehler. Wisst ihr, woran das liegen kann? Darf ich die rekursion so machen, wie im Code?

Schonmal vielen Dank!
Grüße

anda_skoa
17-02-2011, 17:53
Die Bedingung in einer ersten Übrprüfung ist in der falschen Reihenfolge. Du musst zuerst prüfen ob der übergebene Pointer gültig ist und dann erst darauf zugreifen.

Im auskommentierten Code verwirfst du das Element nach dem das du eigentlich löschen willst.
Weiters hast du dieses entfernte Glied dann auch noch "verloren" (es wird nicht gelöscht und du hast keinen Pointer mehr darauf).