PDA

View Full Version : cancellare lista c


processore
30-06-2013, 16:19
salve.
sto guardando la soluzione di un esercizio in c data una lista la cancella tutta ricorsivamente.

questo e il codice.

void delete_list(link head) {
if(head_of_list->next)// testa della lista
delete_list(head_of_list->next);
delete_node(head_of_list);
}
//
// funzione ausiliaria di delete_list
//
void delete_node(link node){
node->next = NULL;
node->value = -1;
free(node);
}

quello che non capisco e come fa a eliminare la lista.
nel senso fino a che head->next e vero entra nell'if e richiama ricorsivamente la funzione spostandosi nel prossimo elemento.
mentre la funzione delete_node lo richiama solo quando arriva all'ultimo elemento perche head->next e falso, quindi elimina solo l'ultimo elemento mentre degli altri restano liberi in memoria...

mi potreste delucidare le idee ?? ce un modo piu facile per eliminare la lista ricorsivamente ?

vendettaaaaa
30-06-2013, 17:02
salve.
sto guardando la soluzione di un esercizio in c data una lista la cancella tutta ricorsivamente.

questo e il codice.

void delete_list(link head) {
if(head_of_list->next)// testa della lista
delete_list(head_of_list->next);
delete_node(head_of_list);
}
//
// funzione ausiliaria di delete_list
//
void delete_node(link node){
node->next = NULL;
node->value = -1;
free(node);
}

quello che non capisco e come fa a eliminare la lista.
nel senso fino a che head->next e vero entra nell'if e richiama ricorsivamente la funzione spostandosi nel prossimo elemento.
mentre la funzione delete_node lo richiama solo quando arriva all'ultimo elemento perche head->next e falso, quindi elimina solo l'ultimo elemento mentre degli altri restano liberi in memoria...

mi potreste delucidare le idee ?? ce un modo piu facile per eliminare la lista ricorsivamente ?
delete_node viene chiamata per ogni nodo invece: la funzione infatti viene chiamata solo dopo che delete_list ha concluso, cioč quando la ricorsione arriva all'ultimo nodo, e le varie delete_node vengono chiamate a ritroso.

lorenzo001
30-06-2013, 18:42
Vedi

http://forum.html.it/forum/showthread.php?s=&threadid=1547836