Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:
struct nod { int info; nod *urm; };
Câmpul info
memorează un număr întreg, iar câmpul urm
memorează adresa următorului element al listei.
Cerinţa
Lista conține cel puțin două noduri, iar valorile din aceste noduri, considerate în modul, sunt ordonate crescător. Adresa listei este memorată în pointerul head
. Să se scrie o funcție C++ cu următorul antet:
void Reord(nod *&head)
Funcția va rearanja nodurile din listă astfel încât să fie ordonate crescător după valoare. Atenție!, nu veți putea șterge sau crea noduri, ordonarea se va face doar prin modificarea legăturilor.
Restricţii şi precizări
- Lista conține inițial cel puțin două noduri.
- Valorile memorate în listă sunt numere întregi distincte.
- Nu creați noduri noi, nu ștergeți noduri!
Exemplu:
Dacă head = 1, -1, -3, 4, 7, -7, -9, 10, -200
, atunci după apelul funcției head = -200, -9, -7, -3, -1, 1, 4, 7, 10
. Observați că inițial valorile din listă sunt distincte și ordonate crescător (în valoare absolută).
Important
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.