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 *leg; };
Câmpul info
memorează un număr întreg, iar câmpul leg
memorează adresa următorului element al listei.
Cerinţa
Se dă o listă care memorează numere întregi distincte. Adresa listei este memorată în pointerul head
. Să se scrie o funcție C++ cu următorul antet:
void LsiAdd(Nod *&head, int val, int x, int y)
Funcția va căuta, în caz că există, un nod care memorează valoarea val
. Dacă există un asemenea nod, atunci va insera înainte de acest nod un nou nod ce va memora pe x
, și de asemenea va insera după acest nod un nou nod ce va memora pe y
. Dacă nu există un nod care să memoreze valoarea val
, atunci funcția nu va modifica lista. Atenție la faptul că nu puteți să ștergeți sau să modificați informațiile din nodurile deja existente, ci numai să adăugați cele două noduri.
Restricţii şi precizări
- Lista inițială conține cel puțin un nod
- la ieșirea din apel
head
va memora adresa primului nod
Exemplu:
Dacă head = 1,2,3,4,5
, val = 4
, x = 88
, y = 99
, atunci după apelul funcției head = 1,2,3,88,4,99,5
. Iar dacă head = 1,2,3,4,5
, val = 8
, x = 88
, y = 99
, atunci după apelul funcției head = 1,2,3,4,5
.
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.