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
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
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă