einfach verkettete Liste



  • Hallo, ich habe ein Problem mit einfach verketteten Listen, wenn es darum geht ein neues Element ans Ende der Liste anzuhängen.

    Folgende Funktion hab ich geschrieben:

    void insertElementHinten(List &first, ListTyp inhalt)
    {
        ListElement * ptrElem = new ListElement;
        ptrElem->next = NULL;
        ptrElem->inhalt = inhalt;
        if (first == EMPTYLIST)
        {
        first = ptrElem;
        }
        else
        {
        while (first->next != 0)
              {
                      first = first->next;
              }
               first->next = ptrElem;
              }
    }
    

    Folgende Struktur liegt vor:

    struct ListElement
    {
           ListTyp inhalt;
           ListElement *next;
    };
    
    typedef ListElement * List;
    const List EMPTYLIST = 0;
    

    und folgende main:

    int main()
    { 
        List l1 = EMPTYLIST;
    
       insertElementHinten(l1,1);
       insertElementHinten(l1,2);
       insertElementHinten(l1,3);
       insertElementHinten(l1,4);
    }
    

    Allerdings gibt das Programm immer nur die letzten 2 Elemente aus, sprich 3 und 4 und ich hab keinen Plan warum.

    Danke


  • Mod

    while (first->next != 0)
              {
                      first = first->next;
              }
    

    Das wäre ok, wenn first einfach eine lokale Variable wäre.
    Es ist aber eine Referenz auf den Listenanfang, also vergisst du hier alle übersprungenen Elemente.



  • camper schrieb:

    while (first->next != 0)
              {
                      first = first->next;
              }
    

    Das wäre ok, wenn first einfach eine lokale Variable wäre.
    Es ist aber eine Referenz auf den Listenanfang, also vergisst du hier alle übersprungenen Elemente.

    Das heißt? First sollte lokal sein? Wenn ich das allerdings mach, wird gar nichts mehr ausgegeben.


  • Mod

    Tpau schrieb:

    First sollte lokal sein?

    nein. Aber die Schleife muss mit einer lokalen Variable operieren. also

    ListElement* p = first;
             while (p->next != 0)
              {
                      p = p->next;
              }
               p->next = ptrElem;
    


  • camper schrieb:

    Tpau schrieb:

    First sollte lokal sein?

    nein. Aber die Schleife muss mit einer lokalen Variable operieren. also

    ListElement* p = first;
             while (p->next != 0)
              {
                      p = p->next;
              }
               p->next = ptrElem;
    

    Vielen Dank, endlich funktionierts! 🙂


Anmelden zum Antworten