Salve ragazzi stò cercando di creare una lista in C++ e tutte le rispettive functions per la gestione della lista stessa.

Questo è il codice che ho implementato:

codice:
#include <iostream>

using namespace std;


// dichiarazione della struttura "elemento"
struct elemento {
	int info;
	struct elemento *punt;
};


// prototipi delle funzioni
struct elemento *aggiungiInfo(struct elemento *p);
void visualizzaLista(struct elemento *p);


int main()
{
	struct elemento *lista=NULL; 	// puntatore della lista
	int oper;
	char next;

	cout<<"Decidi l'operazione da svolgere:"<<endl;
	cout<<"1) AGGIUNGI INFORMAZIONE"<<endl;
	cout<<"2) VISUALIZZA LISTA"<<endl;
	cin>>oper;

	do
	{
		if (oper == 1)
		{
			lista=aggiungiInfo(lista);
		}	
		else if (oper == 2)
		{
			visualizzaLista(lista);
		}

		cout<<"Vuoi continuare? s/n:"<<endl;
		cin>>next;
	}
	while (next=='s' or next=='S');
}





// corpo della funzione "struct elemento *aggiungiInfo()"
struct elemento *aggiungiInfo(struct elemento *p){
	
	struct elemento *successivo;
	int intero;

	cout<<"Inserisci numero > "<<endl;
	cin>>intero;

	if (p != NULL){
		// aggiungo dinamicamente gli elementi successivi
		successivo=new elemento;
		successivo->info=intero;
		successivo->punt=p;
	}else{
		// creazione del primo elemento
		p=new elemento;
		p->info=intero;
		p->punt=NULL;
		// assegno p a successivo
		successivo=p;
	}
        // visualizzo la lista parziale ad ogni inserimento
	visualizzaLista(p);
	
	return (successivo);
}





// corpo della funzione "visualizzaLista"
void visualizzaLista(struct elemento *p){

	if (p == NULL)
	{
		cout<<"Nessun informazione presente nella lista"<<endl;
	}else{
		// stampo la lista
		while(p != NULL){	
			cout<<"Numero > "<<p->info<<endl;
			p=p->punt;		
		}	
	}
	return;	
}
I miei dubbi sono questi:

1)Come mai quando inserisco il primo elemento(es. 46) nella lista, me lo inserisce ma non me lo visualizza, quando inserisco il secondo elemento(es. 72), me lo inserisce ma mi fà visualizzare quello precedente, ovvero 46. Se ne inserisco un altro(es. 89) , mi visualizza 46 e 72 e così via.

2)Come posso modificare il codice per far si che ad ogni inserimento ritorno di nuovo al menu iniziale, dove mi chiede di aggiungere un informazione o visualizzare la lista?

3)C'è qualcuno che sà spiegarmi in modo davvero semplice la function "aggiungiInfo"? dalla dichiarazione fino al return.

Grazie anticipatamente,
Gaten