direi che non c'è nulla da aggiungere, semmai devi togliere la parte che ho messo nel ciclo while, quella di richiesta del valore.

codice:
struct nodo *creaelemento(int val)
{
   struct nodo *temp;
   temp=(struct nodo*)malloc(sizeof(struct nodo));
   if(temp)
   {
      temp->data=val;
      temp->next=NULL;
   }
   else
      printf("Impossibile allocare");

   return (temp);
}
Il mio ciclo while era in risposta alla tua domanda "come fare per gestire un numero di inserimenti non noti a priori da concludersi alla digitazione dello zero"...