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

Fiecare element al unei liste liniare simplu înlănțuite alocată dinamic reține în câmpul next adresa elementului următor din listă. Dacă p reține adresa primului element, iar lista are cel puțin două elemente, care dintre următoarele secvențe de instrucțiuni șterge al doilea element al listei?

a. q = p->next;
p->next = q->next;
free(q);

b. p->next = p->next->next;
free (p->next);

c. q = p->next;
free(q);
p->next = q->next;

d. free(p->next);

Răspuns: ?


boiustef: corect este a

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
3

Raspuns: a si b.

Deoarece este o simplu inlantuita, trebuie sa ii spunem primului element ca nodul urmator e al 3-lea(daca exista), si apoi sa dealocam memoria alocata pentru al 2-lea nod. Instructiunile sunt:

p->next=p->next->next; //pentru semnalarea nodului 1 ca urmatorul nod e nodul 3

free(p->next);//pentru dealocarea memoriei ocupata de nodul 2

sau

q=p->next;

p->next=q->next;

free(q);

care e aproape la fel, important e ca programul sa nu incerce sa se atinga de *q dupa ce a fost apelata functia free pe el, care este exact problema la c, iar la d nu semnaleaza ca nodul care urmeaza dupa primul este nodul 3.

Alte întrebări interesante