Mam projekt w którym planuję utworzyć drzewo z podwójnymi powiązaniami, ale zanim to zrobię, próbuję się rozgarnąć z listą dwukierunkową. Wiem że to coś prostego ale jako że już 2 dni nad tym siedzę, to mnie trochę to irytuje :/
w programie przygotowuję elementy b typu CBoard, a później go dodaję do listy wywołując funkcję installBoard z parametrem należącym do klasy CGame
//jakas funkcja skladowa klasy CGame
b.installBoard(root_);
klasy zawieraja m.in:
class CBoard {
...
CBoard* nextBoard_;
CBoard* prevBoard_;
public:
...
void display () const;
void installBoard(CBoard*);
}
class CGame {
CBoard* root_;
public:
friend class CBoard;
}
Problem polega na tym, że funkcja listy nie tworzy. W miejscu temp->display(); odpala mi zawsze cos jakby b.display() czyli zamiast wyswietlic element pierwszy na liscie to zawsze wyswietla ten ktory chce dopiero dodac. Z tego co zdazylem sie zorientowac to chyba podejrzane jest to przypisanie temp=root->nextBoard_; ale nie wiem jak to inaczej zorganizowac.
while przechodzi tylko raz
dzieki z gory za pomoc, duzo czasu juz stracilem a za pare dni musze miec to dzialajace ;)
void CBoard::installBoard(CBoard* root) {
CBoard* point;
CBoard* temp;
nextBoard_=0;
temp=root->nextBoard_;
point=root;
if (temp==NULL) { //take first
prevBoard_=root;
root->nextBoard_=this;
return;
}
temp->display();
while (temp!=NULL) {
point=temp;
temp=temp->nextBoard_;
}
//cout <<"temp==NULL" <<endl;
prevBoard_=point;
point->nextBoard_=this;
return;
}