(nella scanf() manca il codice di formato, ma sarà ovviamente un errore di copia visto che è fin troppo banale)
La tua funzione di cancellazione restituisce un valore, ma questo non è assegnato ad alcuna variabile in main()... tra l'altro, restituire l non ti servirà a nulla perché questo viene modificato all'interno della funzione e alla fine conterrà l'indirizzo dell'ultimo nodo della lista. Al massimo lo puoi salvare in una variabile "temporanea" all'inizio della funzione e poi restituire questa stessa variabile, in maniera tale da non perdere il valore originario dell'indirizzo del nodo in testa della lista.
Comunque, sembra strano ma ho provato a compilare e lanciare questo programma e funziona correttamente... dipende forse dal compilatore? In pratica i puntatori ai vari nodi della lista sono gli stessi sia all'interno del main() che nella funzione di cancellazione, quindi le modifiche che vengono fatte in quest'ultima hanno effetto anche sulla lista costruita in main() e il risultato finale è proprio quello che ci si aspetta.
codice:36 72 26 40 26 63 59 90 27 62 21 49 92 86 35 93 15 77 86 83 26 36 72 40 63 59 90 27 62 21 49 92 86 35 93 15 77 86 83