Se consideră o listă liniară dublu înlănțuită cu număr impar de noduri. Să se scrie o funcție care primește ca parametru adresa primului nod al listei și interschimbă primul nod cu ultimul, de-al doilea cu penultimul și așa mai departe, astfel încât cel din mijloc va rămâne neschimbat.
Răspunsuri la întrebare
Salut!
Ai rezolvarea in C++ mai jos
#include <iostream>
using namespace std;
struct nod
{
int info;
nod *ant, *urm;
};
void adaugareInceput(nod*& prim, int x) {
nod *q = new nod;
q->info = x;
q->ant = NULL; //primul element
q->urm = prim;
if (prim != NULL) {
prim->ant = q;
}
prim = q;
}
void afisare(nod* prim) {
while (prim != NULL) {
cout << prim->info << " ";
prim = prim->urm;
}
}
void inversareLista(nod*& prim) {
nod* p, *curent = prim;
while (curent != NULL) {
p = curent->ant;
curent->ant = curent->urm;
curent->urm = p;
curent = curent->ant;
}
if (p != NULL) { //daca lista e vida sau are 1 element
prim = p->ant;
}
}
int main() {
nod* prim = NULL;
adaugareInceput(prim, 1);
adaugareInceput(prim, 2);
adaugareInceput(prim, 3);
cout << "Lista: " << '\n';
afisare(prim);
inversareLista(prim);
cout << '\n' << "Lista inversata: " << '\n';
afisare(prim);
return 0;
}