Problem mit verketteter Liste
-
Hallo,
ich lese gerade das Buch Thinking in C++ Vol. 1 von Bruce Eckel und hänge in Kapitel 4 an Übungsaufgabe 24.
Es ist eine Struktur zu Erstellen, die einen INT und einen Zeiger auf eine andere Instanz der selben Struktur enthält. Weiterhin ist eine Funktion zu schreiben, die die Adresse einer dieser structs und einen INT als Argument entgegennimmt. Entsprechend des Integer-Argumentes ist nun eine Kette von structs zu generieren: Der Integer im Struct soll den Index enthalten und der Zeiger soll auf das nächste Element in der Kette zeigen. Beim letzten Kettenglied soll der INT auf 0 gesetzt werden, um das Ende zu signalisieren.
Nun soll eine zweite Funktion geschrieben werden, die den "Kopf" der Liste entgegennimmt und bis zum Ende alle Indexe (INT-Werte) und die Adressen der Zeiger ausgibt.Nun zu meinem Problem: Mein Code scheint die Liste schon richtig zu generieren, doch beim Ausgeben mittels der zweiten Funktion werden nur die ungeraden Elemente ausgegeben.
#include <iostream> using namespace std; struct myStruct { int index; myStruct *next; } newStruct; myStruct *func( myStruct *mS, int cnt ) { if( cnt >= 0 ) { myStruct *newMs = new myStruct; mS->index = cnt--; mS->next = func( newMs, cnt ); // DEBUG cout << "[" << mS->index << ": " << &mS->next << "]" << endl; return newMs; } return NULL; } void printList( myStruct *head ) { cout << head->index << ": " << &head->next << endl; if( head->index > 0 ) printList( head->next ); } int main() { func( &newStruct, 5 ); printList( &newStruct ); return 0; }Führe ich das Ganze nun aus erhalte ich folgende Ausgabe:
[0: 0x804a04c] # Liste wird erstellt [1: 0x804a03c] [2: 0x804a02c] [3: 0x804a01c] [4: 0x804a00c] [5: 0x8049d9c] 5: 0x8049d9c # Auslesen der Liste beginnt 3: 0x804a01c 1: 0x804a03c 0: 0x804a05cWarum nun nur die ungeraden Indexe und die zugehörigen Zeiger ausgegeben werden und warum beim Index 0 die Adresse verschoben ist, kann ich mir nicht wirklich erklären.

Über einen kleinen Tip würde ich mich sehr freuen.

Viele Grüße!
-
so würde es gehen
myStruct *func( myStruct *mS, int cnt ) { if( cnt >= 0 ) { myStruct *newMs = new myStruct; mS->index = cnt--; mS->next = newMs; func( newMs, cnt ); cout << "[" << mS->index << ": " << mS->next << "]" << endl; return newMs; } return NULL; }Kurt
-
Danke!
