Salve a tutti.

Ho questo codice che crea una lista dinamica di int e la visualizza.

Volendo eliminare un numero dalla lista, come posso fare? Devo fare in modo da poter indirizzare il puntatore del nodo precedente a quello successivo al nodo da eliminare e poi facendo un free(puntatore).

Solo non riesco a far passare l'indirizzo a cui puntare al nodo precedente

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

void crealista();
void visualizzalista();

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

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

main()
{
   crealista();
   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;
   }
}
Grazie mille per eventuali consigli