# PBinfo #3750 – FInserareInainteQ – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

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:

void InserareInainteQ(nod *& prim, nod *& ultim, nod * q, int x);
care adaugă valoarea x inaintea nodului de adresa q al listei pentru care primul element are adresa memorată în pointerul prim si ultimul element are adresa memorata in pointerul ultim.

Restricții și precizări

numele funcției va fi InserareInainteQ;
pointerul q poate fi prim si ultim;
dacă lista nu conține niciun element, pointerii prim si ultim vor avea valoarea NULL;
în toate cazurile, la ieșirea din apel prim va memora adresa primului element al listei, iar ultim va memora adresa ultimului element al listei.
structura care definește tipul nod a fost modificată. Solutiile mai vechi nu mai compilează.

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.

## Cod sursă C++

```cpp
void InserareInainteQ(nod *& prim,nod *& ultim, nod*q , int x)
{
  if(q==prim)
  {
    nod*p=new nod;
    p->info=x;
    p->ant=NULL;
    p->urm= prim;
    prim->ant=p;
    prim=p;
  }
  else
  {
    nod*p=new nod;
    p->info=x;
    p->urm=q;///1
    p->ant=q->ant;///2
    q->ant->urm=p; ///3
    q->ant=p; ///4
  }
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3750)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3750/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3750/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
