codice:
void cancella (struct dato **s) {
        struct dato *l = *s;
        while (l) {
                *s = l -> punt;                 
                free (l);
                l = *s;
        }               
}
Esecuzione:

codice:
struct dato * l1;
...
cancella (&l1);
P.S.
Ci sarà quindi un ciclo (while testa->next != null) {
Se vuoi farlo in questo modo devi prima controllare che testa non sia uguale a NULL, e cmq guarda il codice che ho scritto sopra io.

Ciao! :quipy: