Sto studiando ultimamente le liste linkate da puntatori, in vista di un esame di Laboratorio di Programmazione del 25/1.
Ho scritto un algoritmo che mi permetta di inserire elementi di una lista in testa, in coda, cancellarli, e visualizzare la struttura di una lista ma ho dei problemi col passaggio dei puntatori alle funzioni.
vi elenco di seguito il codice che ho scritto, il Devc++ me lo fa girare, ma quando la funzione passa il puntatore al main, esso ha sempre valore NULL, quindi ci saranno sicuramente alcune cose che ho sbagliato.
mi aiutate?
grazie 
Codice PHP:
#include<iostream>
#include<stdlib.h>
using namespace std;
//creazione struttura
struct nodo{
int info;
nodo* next;
};
//prototipi delle funzioni
nodo inseriscit(nodo* );
nodo inseriscic(nodo *);
void cancella();
void visualizza(nodo *);
int main(void){
nodo* p=NULL; //puntatore alla testa della lista
int scelta;
// menu
do{
// clrscr();
cout<<"Scegliere l'opzione:"<<endl;
cout<<"1.Inserisci nodo in testa"<<endl<<"2.Inserisci nodo in coda"<<endl;
cout<<"3.Elimina un elemento"<<endl<<"4.Visualizza la linked list"<<endl<<"5.Esci"<<endl;
cin>>scelta;
switch(scelta){
case 1: inseriscit(p); break;
case 2: inseriscic(p); break;
// case 3: cancella(); break;
case 4: visualizza(p); break;
case 5: return 0;
}
cout<<"Il valore di p e: "<<p<<endl;
}
while(scelta!=5);
system ("Pause");
}
nodo inseriscit(nodo* p){
nodo* q;
int l,i;
if(p!=NULL) {//lista non vuota
cout<<"Quanti elementi vuoi inserire in testa?"<<endl;
cin>>l;
for(i=0;i<l;i++){
cout<<"Inserire il valore n: "<<i+1;
q=new nodo;
cin>>q->info;
q->next=p;
p=q;
}
}
else {
p=new nodo;
cout<<"Lista vuota, inserire il valore del primo elemento"<<endl;
cin>>p->info;
inseriscit(p);
}
cout<<"Il valore di p è:"<<p<<endl;
return *p;
}
nodo inseriscic(nodo *p){
int i, l;
nodo* q=p;
if(q!=NULL) //la lista è non vuota
while(q->next!=NULL) //la scorro per arrivare alla fine
q=q->next;
cout<<"Quanti elementi vuoi inserire in coda?"<<endl;
cin>>l;
for(i=0;i<l;i++) {
q= new nodo;
cout<<"Inserire il valore n: "<<i+1;
cin>>q->info;
q=q->next;
}
q->next=NULL; //l'ultimo nodo della lista punta a NULL
cout<<"Elementi inseriti correttamente.."<<endl;
cout<<"Il valore di p è:"<<p<<endl;
return *p;
}
void visualizza(nodo *p){
nodo* q=p;
if(q==NULL)
cout<<"Lista vuota."<<endl;
else
while(q->next!=NULL) {
cout<<q->info<<"-->\t";
q=q->next;
}
}