Element aus verketteter Liste löschen



  • Hallo bin auf der Suche auf dieses Forum gestoßen.

    Bin dabei eine verkettete Liste zu schreiben, hänge jedoch bei der remove Funktion.

    Es geht um eine einfach verkette Liste mit Int als value.

    Das Problem meine remove Funktion liefert zwar den richtigen Wert zurück, jedoch wird das Element nicht gelöscht.

    LinkedList::LinkedList() {
        firstElement_=NULL;
    }
    
    void LinkedList::add(int value)
    {
    
         Element* newElement= new Element(value,this->firstElement_);
         firstElement_ = newElement; // neues Erste Element
    }
    
    bool LinkedList::remove(int value)
    {
        //Value von Next nachschauen, wenn nicht gleich dann weiter, wenn gleich dann remove Element und zeiger auf übernächstes Element,
        //zusätzlich überprüfen ob next von nächstem Element == NULL
    
        Element* deleteElement=firstElement_;
        //Kontrolle ob 1tes Element gesucht wird
        if (deleteElement->value_==value)
        {
            Element* tmp;
            tmp=deleteElement; 
            deleteElement=deleteElement->next_;
            delete tmp;
            return true;
    
        }
        //Suche nach Element,Abbruch wenn nächstes auf Nullpointer zeigt oder value im nächsten steht
        while (deleteElement->next_!=NULL && deleteElement->next_->value_!=value )
        {
            deleteElement=deleteElement->next_;
        }
    
        if (deleteElement->next_==NULL) //nicht gefunden
        {
            return false;
        }
        else
        {
            Element* tmp;
            tmp=deleteElement->next_; //nächste element, was zu löschen ist
            deleteElement->next_=deleteElement->next_->next_;
            delete tmp;
            return true;
        }
    

    Sinn war das nächste Element auf den Value zu überprüfen und zu schauen ob es das letzte Element ist, sprich nicht gefunden.

    Die tmp habe ich benutzt, da ich den Next Zeiger ja noch brauche um auf das übernächste Element zu zeigen.

    Wenn ich teste bekomme ich die richtigen bool Werte, kann die elemente aber immer noch finden. Stehe da gerade etwas neben mir 😃 und komme nicht weiter.



  • versuchs mal damit
    bool LinkedList::remove(int value)
    {**
    Element** deleteElement;**

    deleteElement = &firstElement_;
    while ((*deleteElement) != NULL && (*deleteElement)->value_ != value)
    {
    deleteElement = &((*deleteElement)->next_);
    }
    if (*deleteElement == NULL)
    { // nicht gefunden
    return false;
    }
    else
    { // gefunden
    *deleteElement = (*deleteElement)->next_;
    return true;
    }
    }



  • Mit doppelten Pointern habe ich bisher noch nicht gearbeitet und ich erkenne jetzt auch nicht wo da mein Element was gefunden wurde gelöscht wird.

    Mein Problem ist ja das m.E. nach meine Abfragen(Verzweigungen) richtig sind, ich jedoch nicht genau raffe warumm das Element nicht gelöscht wird.



  • Muss es nicht

    firstElement_=deleteElement->next_;

    sein, anstatt

    deleteElement=deleteElement->next_;

    So zeigt doch dein firstElement_ auf nichts, wenn deleteElement gelöscht wird?
    (Ich hoffe, dass ich nichts übersehen habe)



  • @Schamote Danke ich glaub du hast mich vom Schlauch geschubst 😃



  • Immer wieder gerne 🙂


Anmelden zum Antworten