Doppelt Verkettete Listen



  • Hallo, ich weiß über das Thema gibt es eine haufen Beiträge und ich suche schon sehr lange nach nützlichen Lösungen und alles was ich in Foren finde , hilft mir nicht mein Problem zu lösen. Also habe ich mich hier jetzt Angemeldet um mal eine eigene Frage zu stellen. Ich habe ein Problem mit dem Einfügen in der Liste in c++.
    Mein Code sieht so aus:

    class Node {
    public:
    	Node *next;
    	Node *prev;
    	int values;
    };
    
    
    class Liste {
    private:
    	Node *root;
    	int size;
    public:
    	Liste();
    	Node* append(int val);
    	void begin(int val);
    	void end(int val);
    	void between(int val);
    	void print();
    };
    
    Liste::Liste() {
    	size = 5;
    	root = new Node();
    	root->next = nullptr;
    	root->prev = nullptr;
    	root->values = 0;
    }
    
    Node* Liste:: append(int val) 
    {
    	Node * newnode = new Node();
    	newnode->values = val;
    	if (root == 0)
    	{
    		newnode->prev = nullptr;
    		newnode->next = nullptr;
    		root = newnode;
    	}
    	else 
    	{
    		while (root->next != NULL) {
    			root = root->next;
    		}
    		if (root->next == nullptr)
    		{
    			root->next = newnode;
    			newnode->prev = root;
    			newnode->next = nullptr;
    		}
    	}
    	return newnode;
    }
    

    Und wenn ich dann in der Main z.b. 4 mal Einfügen möchte werden nur zwei Eingefügt. Also wenn ich : 1,2,3,4 einfügen möchte, wird nur 3,4 eingefügt. Vielleicht sieht ja jemand meinen Fehler aber ich bin wirklich ratlos



  • Mit deiner while schleife in append überschreibst du dir deinen root member.
    Dieser zeigt dann nicht mehr auf das erste element in der liste
    Dadurch erzeugst du auch einen memory leak.



  • @firefly
    achso, das erklärt warum die root dann ganz leer ist, aber dann verstehe ich nicht wie ich sonst durch die Liste gehen kann bis zum letzten Element um was am ende einzufügen, mit einer for schleife hat das genauso wenig funktioniert, und rekursiv war auch eine idee aber das hatte auch nicht richtig geklappt



  • Welchen schleifen typ du verwendest ist egal. Du darfst bei der suche aber nicht den root member verändern! Dass ist dein Problem und nicht die Schleife!



  • Du wirst wohl noch einen Zeiger auf die aktuelle Position baruchen.



  • @manni66 wie meinst du das , also wieso?



  • @noni sagte in Doppelt Verkettete Listen:

    @manni66 wie meinst du das , also wieso?

    @firefly sagte in Doppelt Verkettete Listen:

    Du darfst bei der suche aber nicht den root member verändern!