codice:
#include <stdio.h>
#include <stdlib.h>

void crealista();
void visualizzalista();
void eliminanumero();

struct elenco {
   int numero;
   struct elenco *pun;
   };

int i,n;
struct elenco *p,*paux, *paux2;

main()
{
   crealista();
   visualizzalista();
   eliminanumero();
   visualizzalista();
}

void crealista()
{
   printf("Quanti numeri vuoi inserire nella lista? ");
   scanf("%i",&n);

   if (n==0)
      p = NULL;
   else
   {
        p = (struct elenco *)malloc(sizeof(struct elenco));
      printf("\nInserisci il valore: ");
      scanf("%i",&p->numero);
      paux = p;
      for (i=1;i<=n-1;i++)
      {
         paux->pun = (struct elenco *)malloc(sizeof(struct elenco));
         paux = paux->pun;
         printf("\nInserisci il valore: ");
              scanf("%i",&paux->numero);
              if (i==n-1)
                paux->pun = NULL;
      }
   }
}

void visualizzalista()
{
   system("cls");
   paux = p;
   while (paux != NULL)
   {
      printf("%i\n",paux->numero);
      paux = paux->pun;
   }
} 

void eliminanumero()
{
	int dato;
	printf("Che numero vuoi eliminare? ");
	scanf("%i",&dato);
	paux = p;
        while (paux != NULL)
        {
            if (paux->numero == dato)
	    {
		paux2 = paux;
                paux = paux->pun;
		free(paux2);
	    }
	paux = paux->pun;
        }
}
modificato il codice così ma non funziona e in effetti dubito abbia molto senso