👤
Printess199
a fost răspuns

3750 pbinfo
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, pointerul prim si ultim va 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 se 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.


Răspuns :

Răspuns:
Salut! (*/ω\*)

Ai aici rezolvarea problemei #3750 de pe pbinfo

void InserareInainteQ(nod *&prim, nod *&ultim, nod *q, int x){

   nod *nou = new nod;

   nou -> info = x;

   if(prim == NULL){

       // lista este vida

       nou -> ant = nou -> urm  = NULL;

       prim = ultim = nou;

   }else if(q == prim){

       

       // inserez la inceputul listei

       nou -> urm = prim;

       nou -> ant = NULL;

       prim = nou;

   }else{

       nod *t = new nod;

       t = prim;

       while(t -> urm != q)

           t = t -> urm;

       // t este elementul din stanga celui memorat la adresa q

       nou -> urm = t -> urm;

       nou -> ant = t;

       t -> urm = nou;

   }

}

#copaceibrainly