Lista dwukierunkowa moze zostac „odwrócona” na dwa sposoby. Mozna pozmieniac wskazniki we wszystkich elementach tak, aby dostac odwrotny porzadek lub mozna pozostawic strukture listy bez zmian i parami pozamieniac dane elementów listy. Zaimplementuj te dwa sposoby. void reverse(elem *&lista).
void reversee(elem *&lista) { elem* zap; elem* tym; while (true) { zap = lista->nast; tym = lista->poprz; lista->poprz = lista->nast; lista->nast = tym; if (!zap) break; lista = zap; } }
int size(elem* pam) { int rozmiar = 0; while (pam) { rozmiar++; pam = pam->nast; }; return rozmiar; }
void reverse(elem *&lista) { elem* pam = lista; int rozmiar = size(lista); int skok = rozmiar - 1; int dana1; int dana2; for (int i = 0; i < rozmiar / 2; i++) { dana2 = lista->dane; for (int i = 0; i < skok; i++) { lista = lista->nast; } dana1 = lista->dane; lista->dane = dana2; for (int i = 0; i < skok; i++) { lista = lista->poprz; } lista->dane = dana1; lista = lista->nast; skok -= 2; } lista = pam; }
|