doppelt verkettete liste
-
Hi leute, ich weiss, dass des eine blöde frage isch, aber kann mir jemand den fehler in meinem programm zeigen?
das soll eine sortierte doppelt verkettete liste werden!
die header datei
class element{ friend class slist; private: int entry; element *next; element *prev; }; class slist{ public: slist(); // construct empty list ~slist(); // destruct list void insert(int value); // insert element with entry value // such that list remains sorted ...
und meine insert funktion sie funkt!!! jedoch bei der print funktion, welche rückwärts die liste durchtgeht funkt nit!!
void slist::insert(int value) { element *nelement = new element; nelement->entry = value; nelement->next = 0; nelement->prev = 0; if (start == 0) start = nelement; else if (start->entry > value) { nelement->next = start; start = nelement; } else { element *help1 = start; element *help2 = start->next; while ((help2 != 0) && (help2->entry < value)) { help1 = help2; help2 = help2->next; } help1->next = nelement; nelement->prev = help1; //und hier sollte der zeiger auf das vordere element gelegt werden! nelement->next = help2; } return; }
und dann noch die print funktion, die von hinten her abliest
void slist::print(){ element *help = start; //element *temp = start->next; while (help->next != 0){ //help = temp; help = help->next; //cout <<help->nextentry<<endl; } //cout <<" test"<<help->entry<<endl; while (help->prev != 0){ cout << help->entry; help = help->prev; cout <<"prev "<< help->entry; } cout <<endl;}
ich sage dank!!
-
Ich frag:
Was genau klappt net?DgM
-
also die print funktion!
er geht zwar ans ende der liste! gibt dann aber nur die ersten 2 elemente (bzw letzten der liste aus!void slist::print(){ element *help = start; // element *temp = start->next; while (help->next != 0){ //help = temp; help = help->next; // cout <<help->nextentry<<endl; } //cout <<" test"<<help->entry<<endl; while (help->prev != 0){ cout << help->entry<<endl; help = help->prev; // cout <<"prev "<< help->entry; } cout <<endl; }
-
Pseudocode:
void list::print() { if(numofelements != 0) { element* current = start; do { cout << current->value; } while((++current)->next != 0); } }
[ Dieser Beitrag wurde am 05.05.2003 um 20:50 Uhr von Lars editiert. ]