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 întreg, 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:
int FLdiCauta(nod *prim, nod *ultim, int k)
Primul nod are adresa memorată în pointerul prim si ultimul nod are adresa memorata in pointerul ultim. Numărul k este întreg și nenul. Dacă k > 0, atunci funcția va returna informația reținută în al k-lea nod, parcurgând lista de la stânga la dreapta. În cazul, în care k este mai mare sau egal cu numărul de noduri, atunci funcția va returna informația din nodul ultim. Dacă k < 0, atunci, notând cu p = -k, funcția va returna informația reținută în al p-lea nod, parcurgând lista de la dreapta la stânga. În cazul, în care p este mai mare sau egal cu numărul de noduri, atunci funcția va returna informația din nodul prim. De exemplu, dacă lista reține valorile 5,3,6,2,8, atunci FLdiCauta(prim, ultim, 4) = 2, FLdiCauta(prim, ultim, 20) = 8, iar FLdiCauta(prim, ultim, -4) = 3.
Restricții și precizări
- numele funcției va fi
FLdiCauta - lista inițială conține cel puțin un nod
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.