Element (Node) aus verkettete Liste löschen
-
So nochmal Hallo

jetzt häng ich hier grad etwas an der verketteten Liste....
das ganze funktioniert soweit ganz gut, also mit anlegen, auslesen, etc.....
nur jetzt will ich ein Element in der Mitte der Liste löschen.In Meiner Listenklasse hab ich folgende Methoden
const Node *begin(); const Node *end(); const Node *getAktuell(); void reset(); void erase(); void next(); void insert(Node *neuesElement){insert(neuesElement, start);} void insert (Node *neuesElement, Node *&Zeiger);Ich hab jetzt versucht der Löschen-Funktion das zu löschende Objekt zu übergeben:
void erase(Node *eraseThis){ // Löschenfunktion }Nur hab ich jetzt keine Ahnung wie ich das anstelle. Denn soweit ich weiß kann ich ja in der Liste nicht zurückgehen, oder? Ich meine um das vorherige Element auf das folgende von 'eraseThis' zeigen zu lassen.
Und dann müsste ich ja noch irgendwie den belegten Speicher freigeben....Wäre super wenn Ihr mir helfen könntet. Danke schon mal!
-
In einer Doppeltverkettetenliste kannst du auch wieder zurück gehen. Bei einer einfach verketteten, musst du wohl von Anfang an durchgehen und das vorherige Element suchen.
Mit new angeforderten Speicher gibt man mit delete wieder frei.
-
rüdiger schrieb:
In einer Doppeltverkettetenliste kannst du auch wieder zurück gehen. Bei einer einfach verketteten, musst du wohl von Anfang an durchgehen und das vorherige Element suchen.
Danke für die schnelle Antwort. Eine doppelt verkettete Liste hab ich noch nicht gemacht.
Ich denke mal ich brauche dafür in meiner Node-Klasse noch einen Pointer auf das vorherige Element? Ungefähr so?#include <string> #include <cassert> using namespace std; class Node { friend class Liste; public: Node(string); ~Node(); private: string wort; Node *next; Node *prev; };aber wie sage ich ihm dann, dass prev auf das vorherige Node zeigt??
Ein neues Node füge ich momentan so ein:void Liste::insert(Node *neuesElement, Node *&Zeiger){ assert (neuesElement != NULL); // assert = Behauptung! if ((Zeiger == NULL) || (neuesElement->wort < Zeiger->wort)){ neuesElement->next = Zeiger; Zeiger = neuesElement; elemente++; } else insert (neuesElement, Zeiger->next); }rüdiger schrieb:
Mit new angeforderten Speicher gibt man mit delete wieder frei.
Ja delete hatte ich mir schon gedacht.... aber ich wusste nicht was ich dann dahinter schreibe.... würde das so gehen?
delete neueListe.getAktuell();