[C++]Lista wskaźnikowa
Ostatnio zmodyfikowano 2011-09-18 10:13
BlackDante Temat założony przez niniejszego użytkownika |
[C++]Lista wskaźnikowa » 2011-09-18 09:58:54 Witam po dłuższej nieobecności na forum :) mam chyba szkolny problem ponieważ nie mogę napisać implementacji listy wskaźnikowej dwukierunkowej, mianowicie mam kłopoty z usuwaniem pierwszego elementu z listy, pomimo że wskaźnik next elementu następnego się nie zmienia to nagle zaczyna wskazywać na swój element i tworzy się taka nieskończona pętla: klasa wygląda tak: class List { private: static List * root; static int number; int value; List * next; List * prev; public: List( void ); ~List( void ); bool empty( void ); void insert( int value ); void remove( int value ); void print( void ); bool search( int value ); }; sama funkcja remove wygląda następująco: void List::remove( int value ) { if( next->value == value ) { root->next = next->next; root->next->prev = NULL; number--; } else { List * pomoc; pomoc = next; while( pomoc->value != value && pomoc->next != NULL ) { pomoc = pomoc->next; } if( pomoc->value == value && pomoc->next == NULL ) { pomoc = pomoc->prev; pomoc->next = NULL; number--; } if( pomoc->value == value && pomoc->next != NULL ) { pomoc = pomoc->prev; pomoc->next = pomoc->next->next; pomoc->next->prev = pomoc; number--; } } }
będę wdzięczny za każdą pomoc :) |
|
pekfos |
» 2011-09-18 10:00:45 to się nazywa lista dwukierunkowa :P if( next->value == value ) { root->next = next->next; root->next->prev = NULL; number--; } dostrzegam tu problem |
|
BlackDante Temat założony przez niniejszego użytkownika |
» 2011-09-18 10:13:46 to jest chyba bez różnicy czy będzie się kończyć na głowie czy pierwszym elemencie, szczególnie że nie mam później nic co wykorzystuje pierwszy prev :) może bardziej zobrazuje mój problem, mianowicie jeśli wrzucimy do tej listy elementy 3,5,7 wszystko się ładnie tam doda, jeśli usuniemy 5, wszystko ładnie działa nadal, jeśli usuniemy 7 wszystko nadal ładnie działa... jeśli usuniemy 3.... wtedy funkcja print wypisuje mi wszystkie pozostałe elementy listy w kółko(po zmianie na root, też) aż do zabicia procesu.
Edit: problem rozwiązany temat zamykam :) |
|
« 1 » |