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;
}
Offline