Problem mit einfach-verketteter Liste
-
typedef struct { struct abc *next; int randomNumber; } abc;
Definiert eine unbenannte (d.h. ohne Tagname) Struktur, und gibt ihr den typedef-Namen abc.
struct abc *next;
in der Strukturdefinition definiert einen Zeiger auf eine Struktur mit dem Tagnamen abc. Die hat nichts mit der von dir definierten Struktur zu tun.
typedef struct abc { struct abc *next; int randomNumber; } abc;
sollte die (berechtigten) Warnungen eliminieren.
-
ja, die warnungen sind jetzt weg. danke.
aber das programm funktioniert immernoch nicht, wie es soll. der listeneintrag "node" wird nicht an "main" angehängt.
-
Du solltest auch
trash->next
einen anderen Wert zuweisen.
Überleg aber mal, welchen Werttrash
hat, nachdem diewhile
-Schleife fertig ist.
-
mhh, ich weiß nicht so ganz, worauf du anspielen willst.
trash
hat nach dem ende der while-schleife den wert NULL. dieses NULL wird mit der adresse des nodes überschrieben, das hinzugefügt werden soll.oder täusch ich mich da?
-
Ja, daher kannst du da nicht trash->next nehmen.
Der Pointer trash ist lokal. Der ist kein Bestandteil der Liste.
Der ist so wie dein Finger, wenn du auf die Knoten zeigst.
Mal es dir mal auf.
-
DirkB schrieb:
Ja, daher kannst du da nicht trash->next nehmen.
Der Pointer trash ist lokal. Der ist kein Bestandteil der Liste.
Der ist so wie dein Finger, wenn du auf die Knoten zeigst.
Mal es dir mal auf.ok, aber wie soll ich das dann machen?
-
DirkB schrieb:
Du solltest auch
trash->next
einen anderen Wert zuweisen.Du musst die Schleife beenden, wenn
trash->next
NULL ist.Beachte aber, dass auch
trash
schon NULL sein kann.
-
also meinst du das jetzt so:
// ... while( trash->next != NULL) { trash=trash->next; } trash=node;
sorry, wenn das jetzt nicht stimmt. ich steh grad voll aufm schlauch.
-
Das
next
soll doch immer auf das nächste Element verweisen.
Also musst du auch dieses next verändern. Und zwar von dem Vorgänger.node->next = trash->next; // damit die Verkettung erhalten bleibt trash->next = node; // einbauen
-
ok, jetzt funktioniert alles. danke!