Qual è l'algoritmo che permette il caricamento di una lista unidirezionale, cioè costituita da nodi aventi un elemento e un solo puntatore?

Io so questo algoritmo ma è errata la chiamata alla procedura che ne permette il caricamento.

Innanzitutto nella dichiarazione ho:

codice:
struct lista{
     int n;
     lista* pt;
};

lista* first=NULL;

int x;
char risposta;

void inserisci_in_lista(lista*,int);
Poi ho:

codice:
int main()
{
  do{
     cout<<"Inserisci un valore da inserire nella lista : ";
     cin>>x;
     inserisci_in_lista(first,x);
     cout<<"\nVuoi continuare l'inserimento di valori nella lista? (s/n) : ";
     cin>>risposta;
  }while(risposta=='s');

  getch();
  return 0;
}

void inserisci_in_lista(lista* lx, int val){
          if(lx==NULL){
                lx=new(lista);
                lx->n=val;
                lx->pt=NULL;
          }
          else
                inserisci_in_lista(lx->pt,val);
}
Il problema è la chiamata: se faccio il passaggio per valore poi non mi modifico first, se faccio il passaggio per referenza di first da errore....come si fa?