Lista dwukierunkowa- problem z tworzeniem

0

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;
}
0
anath0r napisał(a)
  temp=root->nextBoard_; 
}

Może być podejrzane, jeśli przy tworzeniu CBoard nie zerujesz tego wskaźnika (root->nextBoard_).

Jeśli jednak tworzysz ręcznie listę dwukierunkową, to może zrób to taka konstrukcją:

class K_LISTA_D{

    class k_wezel{
        k_wezel * next, * pop;
        //...
        // składniki z CBoard
        //...
        //-------
        k_wezel(){
            next = pop = 0;
        }
    };

    k_wezel * glowa, * ogon;

    public:

    K_LISTA_D(){
        glowa = ogon = 0;
    }
    //-------------
    // funkcje operujące na liście: dodawanie, usuwanie, przesuwanie elementow...


};

1 użytkowników online, w tym zalogowanych: 0, gości: 1