salve.
sto guardando la soluzione di un esercizio in c data una lista la cancella tutta ricorsivamente.

questo e il codice.
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 ?