c++ - Element in eine Liste einfügen



  • Hallo Leute 😃

    Mein Problem ist, dass ich best. Daten zu meiner Liste an einer best. Stelle hinzufügen will.
    Der Wert wert_neu soll vor dem Wert vor_wert eingefügt werden. Jedoch klappt es bei mir einfach nicht, das überhaupt ein
    neuer Wert eingefügt wird. Wenn ich Werte hinten anfügen will, klappt dies ohne Probleme.

    
    struct TListenKnoten
    {
    	int data;
    	TListenKnoten* next;
    	TListenKnoten* prev;
    };
    
    void in_liste_einfuegen(TListenKnoten*& anker, int wert_neu, int vor_wert)
    {
    	// der neue Knoten der in die Liste eingefügt werden soll
    	TListenKnoten* neuer_wert = new TListenKnoten;
    	neuer_wert->data = wert_neu;
    
    	// Wird ausgeführt, wenn die Liste leer ist
    	if (anker == nullptr)
    	{
    		
    		hinten_anfuegen(anker, wert_neu);
    		
    	}
    	// wenn die Liste min. ein element hat
    	else
    	{
    		TListenKnoten* ptr = anker;
    		while (ptr->next != nullptr  )
    		{
    			
    			if(ptr->next->data == vor_wert)
    			{
    			
    				
    				neuer_wert->next = ptr->next;
    				ptr = neuer_wert;
    			
    				break;
    			}
    			
    
    			ptr = ptr->next;
    		}
    		// wenn der wert in der Liste nicht vorkommt
    		if (ptr == nullptr)
    	        {
    			
    			hinten_anfuegen(anker, wert_neu);
    			
    	        }
    	}
    
    }
    

    Ich danke euch schon mal im Vorraus 😃



  • Das ist C mit nullptr. Warum?

    ptr = neuer_wert; und dann wird die Funktion verlassen. Wer kennt dann noch neuer_wert?



  • Die Idee ist, dass ptr dann auf den knoten neuer_wert zeigt und mit

    neuer_wert->next = ptr->next;
    

    der pointer von neuer wert auf den Knoten wo vor_wert gespeichert ist.
    ja ich weiß ich könnte einfach die standard Funktionen von cstring verwenden, mach das aus
    reinen Übungszwecken.



  • @jojo sagte in c++ - Element in eine Liste einfügen:

    Die Idee ist, dass ptr dann auf den knoten neuer_wert

    Ja. Und wie lange tut er das? Wie lange existiert ptr? Was hat ptr mit der Liste zu tun?

    ja ich weiß ich könnte einfach die standard Funktionen von cstring verwenden,

    Was?



  • @jojo, du möchtest wohl (anstatt ptr = neuer_wert;)

    ptr->next = neuer_wert;
    

    ?!



  • ptr soll nur dafür gedacht sein mich durch die Liste zu hangeln.



  • @Th69 ja stimmt , du hast recht, das muss ja der Pointer sein der auf neuer_wert zeigt.



  • @jojo sagte in c++ - Element in eine Liste einfügen:

    ptr soll nur dafür gedacht sein mich durch die Liste zu hangeln.

    So langsam musst du mal anfangen zu denken.

    Über prev hast du dir ja noch gar keine Gedankrn gemacht.


Anmelden zum Antworten