PDA

Visualizza la versione completa : [C] spiegazione di 2 funzioni


Kandalf
24-05-2004, 12:08
mi spiegate concettualmente come lavora queste 2 funzioni
nel primo come si costruisce la lista temp?


hello *invord(hello *p)
{
hello *temp;

if (p == NULL || p->next == NULL)
return p;
else {
temp = invord(p->next);
p->next->next = p;
p->next = NULL;
return temp;
}
}


void stampainv(hello *p)
{
if (p != NULL) {
stampainv(p->next);
printf("%d -> ", p->n);
}
}

anx721
24-05-2004, 12:42
La prima funzione mi sembra che fa il reverse della lista, cioč il primo elemento diventa l'ultimo, il secondo diventa il penultimo, ecc ecc...

Difatti puoi notare che la procedura viene prima invocata ricorsivamente sulla lista a partire dal secondo elemento ( invord(p->next) ), in questo modo a temp viene assegnata il reverse della lista che va dal secondo all'ultimo elemento, per completare l'operazione, quello che era l'originario primo elemento, cioč p, viene agganciato alla fine della lista reversed ottenuta, con l'operazione

p->next->next = p;


in quanto p->next era l'originario secondo elemento, che pero e diventato l'ultimo nella lista temp dopo l'operazione di reverse.


L'altra funzione mi pare che stampi la lista al contrario, in quanto la procedura viene chiamata ricorsivamente prima sulla lista a partire dal secondo elemento, e alla fine si stampa il primo.

:ciauz:

Loading