Metti la dichiarazione della struttura e del tipo, fuori dal main.

Il puntatore all'inizio della lista, deve essere NULL in partenza ...

Non fare differenza tra il primo elemento e i successivi (x e y) ... Utilizza un solo ciclo.

Questa istruzione

x=nuovo->dato

significa il contrario di quello che vuoi fare ...

La liberazione della memoria con la free, è sbagliata. Esistono tanti elementi allocati ...