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 ?
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 ?