Informatică, întrebare adresată de malmurk, 8 ani în urmă

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

Răspuns de Sergetec
3

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;

}

Alte întrebări interesante