Studiando le liste a scuola siamo arrivati all'inserimento di valori in una lista e alla visualizzazione dei valori...ma provando il programma datomi a casa non funge, e applicandomi a tavolino credo di aver individuato il problema.
Il programma è il seguente:

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

/* INIZIO DICHIARAZIONE */

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

lista* first=NULL;

int x;
char risposta;

void inserisci_in_lista(lista*,int);
void visualizza_lista(lista*);

/* FINE DICHIARAZIONE */

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');
  visualizza_lista(first);

  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); 
}

void visualizza_lista(lista* lx){
          if(lx!=NULL){
                cout<<lx->n;
                visualizza_lista(lx->pt);
          }
}

In rosso le parti che non mi convincono:
Nella prima, riguardo al passaggio di first, credo proprio che sia sbagliato, in quanto poi io passo sempre e solo first e non faccio assolutamente riferimento ai successivi nodi della lista...quindi cosa dovrei mettere?

la seconda questione riguarda la chiamata ricorsiva...ma a che mi serve nell'inserimento quella ricorsione se io nn vedrò mai l'else?