struct foo * kill(struct foo *current){

if(current != NULL){
current->next = current->next->next;
kill(current->next);
}

return current;
}


La funzione la invochi passandole il primo elemento della lista
ex. first = kill(first);

Gli elementi nn vengono eliminati fisicamente, ma solo tolti dalla lista. Basta inserirgli il free...