Ho fatto questo programma in C :

codice:
#include <stdio.h> 
#include <malloc.h>
struct elemento
{
        int inf;
        struct elemento *pun;
}
struct elemento *crea_lista();
void visualizza_lista(struct elemento *p);
int main()
{
    struct elemento *lista;
    lista = crea_lista();
    visualizza_lista(lista);
    system("PAUSE");
    return 0;
}
struct elemento *crea_lista()
{
        struct elemento *p, *punt;
        int i, n;
        printf("Specificare il numero di elementi : ");
        scanf("%i",&n);
        if(n==0)
        {
                p = NULL;
        }
        else
        {
            p = (struct elemento *)malloc(sizeof(struct elemento));
            printf("Inserisci il primo valore : ");
            scanf("%i",p->inf);
            punt = p;
            for(i=0;i<=n;i++)
            {
                             punt->pun = (struct elemento *)malloc(sizeof(struct elemento));
                             punt = punt->pun;
                             printf("Inserisci il %i elemento : ",i);
                             scanf("%i",&punt->inf);
            }
            punt->pun = NULL;
        }
        return(p);
}
void visualizza_lista(struct elemento *p)
{
      printf("Lista : ");
      while(p!=NULL)
      {
                    printf("%i--->",p->inf);
                    p = p->pun;
      }
      printf("\nNULL");
}
Ma quando lo eseguo mi dice : two or more data types in declaration of `crea_lista'
Quindi cosa devo fare per farlo funzionare?? Scusate ma è la prima volta che uso le liste...