Se consideră o listă liniară dublu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:
struct nod { int info; nod *ant, *urm; };
în care câmpul info
memorează un număr natural, câmpul ant
memorează adresa elementului anterior al listei, iar campul urm
memorează adresa elementului următor al listei.
Cerința
Să se scrie o funcție C++ cu următorul prototip:
void StergeAB(nod *&prim, nod *&ultim, int A, int B)
Primul nod are adresa memorată în pointerul prim
si ultimul nod are adresa memorata in pointerul ultim
. Lista conține cel puțin trei noduri. Funcția va șterge primul nod care memorează valoarea A
și ultimul nod care memorează valoarea B
. De exemplu, dacă lista reține valorile 5,3,6,2,1,8,6,1,5,1,4
, A = 6
și B = 5
atunci după apelul StergeAB(prim, ultim, 6, 5)
, lista va fi 5,3,2,1,8,6,1,1,4
.
Restricții și precizări
- Numele funcției va fi
StergeAB
A ≠ B
- Lista inițială conține cel puțin trei noduri
- Dacă lista nu conține noduri care memorează valorile
A
șiB
, atunci nu se șterge niciun nod din listă. Dacă lista conține doar valoareaA
, atunci se va șterge doar primul nod care memorează valoareaA
. Dacă lista conține doar valoareaB
, atunci se va șterge doar ultimul nod care memorează valoareaB
.
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.