[C++] połączenie list jednokierunkowych
: 22 sty 2013, o 19:13
Proszę o pomoc w zadaniu:
/*
Wstaw kopię podanej listy "fragment" do danej listy jednokierunkowej
"glowa" pomiędzy każdymi dwoma elementami
Przykład:
jeżeli funkcja zostanie wywołana dla listy (4, 7, 1, 3) z argumentem
fragment=(3, 2, 1), w wyniku otrzymamy listę
(4, 3, 2, 1, 7, 3, 2, 1, 1, 3, 2, 1, 3)
*/
Przy pierwszym przejściu pętli wszystko jest ok, ale już przy drugim pętla działa w nieskończoność. Nie rozumiem, dlaczego tak się dzieje. Dlaczego 'w->nast' nigdy nie jest nullem? Przecież 'w' wskazuje na 'fragment', który w końcu kończy się nullem...
Sprawdzałam, czy kod działa, jeśli fragment wkleić tylko raz (czyli bez tego zewnętrznego whila) i wtedy wszystko jest ok.
/*
Wstaw kopię podanej listy "fragment" do danej listy jednokierunkowej
"glowa" pomiędzy każdymi dwoma elementami
Przykład:
jeżeli funkcja zostanie wywołana dla listy (4, 7, 1, 3) z argumentem
fragment=(3, 2, 1), w wyniku otrzymamy listę
(4, 3, 2, 1, 7, 3, 2, 1, 1, 3, 2, 1, 3)
*/
Kod: Zaznacz cały
void wstaw_pomiedzy_dwa(wezel*& glowa, wezel* fragment)
{
if (glowa==NULL || glowa->nast==NULL || fragment==NULL)
return;
wezel* w = glowa;
wezel* w2 = glowa->nast;
while (w2!=NULL)
{
w->nast = fragment;
w = w->nast;
while (w->nast!=NULL)
w = w->nast;
w->nast = w2;
w = w2;
w2 = w->nast;
}
}Kod: Zaznacz cały
while (w->nast!=NULL)
w = w->nast;Sprawdzałam, czy kod działa, jeśli fragment wkleić tylko raz (czyli bez tego zewnętrznego whila) i wtedy wszystko jest ok.