Rekursiv mehrere Elemente aus einfach verketteter Liste löschen
-
Hallo,
verzweifle gerade an einer Methode, die ein oder mehrere Elemente aus einer einfach verketteten Liste löschen soll. Meine Idee war es das ganze mit Rekursion zu lösen, also dass sich die Methode solange selbst aufruft bis sie das zu löschende Element nicht mehr findet.
Im zweiten Rekursionsschritt stürzt mir das Teil jedoch immer ohne wirkliche Fehlermeldung ab, der Debugger sagt nur irgendwas von "suspended" und dann ist es "terminated".
Löschen möchte ich zum Beispiel alle Personen, die 20 Jahre alt sind.
"Person" habe ich durch folgende Struktur modelliert:
struct Person { string name; unsigned int age; Person *next; };So sieht meine Methode aus:
ListeSimple::ERROR_CODE ListeSimple::Remove(int age) { Person *current = head; if (head == NULL) { return EMPTY_LIST; } else { // delete first element if it has the right value if (head->age == age) { Person *del = head; head = head->next; delete del; return Remove(age); } // go through the list, delete elements with the right value and call the function again until the element can't be found anymore else { while ((current->next->age != age) and (current->next != NULL)) { current = current->next; } if (current->next != NULL) { Person *del = current->next; Person *help = del->next; current->next = help; delete del; return Remove(age); } else{ return NO_MORE; } } return VALID; } }Vielen Dank!
Felix
-
Was passiert denn, wenn bei
while ((current->next->age != age)dascurrent->nextgleich NULL ist? Irgendwas merkwürdiges sicherlich. Du solltest die Bedingung in der while-Schleife umdrehen, damit dieser Fall ausgeschlossen ist.Und noch etwas: Das ist das wohl komplizierteste Löschen aus einer Liste, dass ich je gesehen habe. Wie wäre es mit einer einfachen Schleife?
-
wow, du bist ein Genie, das hätte ich nie gesehen.
Jetzt funktioniert es, tausend DAnk!