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
-
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.
-
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!
