Informatică, întrebare adresată de sikesjack1, 8 ani în urmă

Buna! Ma puteti ajuta la problema aceasta? #1177 FListaStergere1 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 * urm; }; în care câmpul info memorează un număr natural, iar câmpul urm memorează adresa următorului element al listei. Cerinţa Să se scrie o funcție C++ cu următorul prototip: void sterge(nod * & p, nod * q); care elimină, dacă există, din lista pentru care primul element are adresa memorată în pointerul p elementul cu adresa memorată în q. Restricții și precizări lista va conține cel puțin un element; la adresa q se află un element al listei; dacă q == p, primul element se va modifica. La ieșirea din apel, p va memora adresa primului element din lista modificată. 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. Mersi!

Răspunsuri la întrebare

Răspuns de MrCalibster
0

void sterge(nod * & p, nod * q)

{

   if(p==q)

   {

       p=p->urm;

       free(q);

   }

   else

   {

       nod *q1=p;

       while(q1->urm!=q)

           q1=q1->urm;

       q1->urm=(q1->urm)->urm;

       free(q);

   }

}

//daca p==q atunci p devine urmatorul element si il putem sterge pe q. In celelalte cazuri luam un pointer si mergem pana la elementul dinaintea lui q. Eliminam legatura dintre q1 si q, dupa care putem sa-l stergem pe q.

Alte întrebări interesante