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

return current; 
}
In questa c'è un problema, current->next potrebbe essere NULL e quindi non ha senzo current->next->next;

codice:
LIST togli_pari(LIST L) 
{ 
LIST pnode; 
if (L == NULL) 
return L; 
else 
{ 
pnode = L->next; 
L->next = togli_pari(pnode->next); 
return L; 
} 
}
lo stesso vale anke qui... pnode potrebbe essere NULL e quindi non ha senza pnode->next

e cmq in entrambi c'è molto garbage (memoria non liberata)...

codice:
if(current != NULL){
   if (current->next != NULL)
   {
      aux = current->next;
      current->next = current->next->next; 
      free(aux);
   }
   kill(current->next); 
} 

return current; 
}
codice:
LIST togli_pari(LIST L) 
{ 
   LIST pnode; 
   if (L != NULL) 
   { 
      pnode = L->next; 
      if (pnode != NULL)
         L->next = togli_pari(pnode->next);
      else
         L->next = NULL;
      free(pnode);
   } 
   return L; 
}