Delucidazione sulle liste

di il
2 risposte

Delucidazione sulle liste

Sto iniziando a studiare le liste e ho creato questo programma per la creazione di una lista, ma ho dei dubbi, come fa "p" ad essere modificato nonostante io non lo ritorni o non lo metta uguale a nulla?
#include <iostream>
#include <string>
using namespace std;

struct nodo{
    nodo *indirizzo;
    int info;
};	


struct nodo *crea_lista(int n,struct nodo *p);
void visualizza(struct nodo *);
 

int main()
{
	struct nodo *p;
	int n;
	
	do{
		cout<<"Quanti elementi contiene la lista?"<<"\t";
     	cin>>n;
	}while(n < 0);
	if (n==0) p=NULL;
	else{
         	
		p = new nodo;
		
    	cout<<"Inserire il primo valore : "<<"\t";
    	cin>>p->info;
    	
    	p->indirizzo=NULL;
    	
		crea_lista(n,p);
		
       
	}
    visualizza(p);
    system("pause");
    return 0;
}

struct nodo *crea_lista(int n,struct nodo *p){
         struct nodo *puntatore;
      	 
         [color=#FF0000]puntatore=p;[/color]
        
         for(int i=0;i<n-1;i++){
         puntatore->indirizzo= new nodo;
         puntatore=puntatore->indirizzo;
         cout<<"Inserire l' elemento : "<<"\t";
         cin>>puntatore->info;
         
         }
         puntatore->indirizzo=NULL;
   
} 

void visualizza(struct nodo *p){
	
	
	while( p != NULL){
		
	
		cout<<" "<<p->info<<"->"<<endl;
	    p=p->indirizzo;
	    system("PAUSE");
	}
	
}
Mi hanno detto che p si modifica attraverso puntatore=p, ma com'è possibile? Io credevo servisse solo per dare a puntatore il primo valore di P. Qualcuno potrebbe spiegarmi?

2 Risposte

  • Re: Delucidazione sulle liste

    p = new nodo;
    p è il puntatore alla testa della lista.
  • Re: Delucidazione sulle liste

    skynet ha scritto:


    p = new nodo;
    p è il puntatore alla testa della lista.
    Si, ma non dovrebbe continuare a puntare a null? Visto che non lo pongo uguale a nulla? Il mio ragionamento è questo:

    Io pongo "puntatore=p;" quindi la variabile locale puntatore prende il valore di p che in quel preciso momento ha come indirizzo null e nel campo info il primo valore, a questo punto puntatore punterà a NULL e avrà come campo info il primo valore, nel for gli indirizzi di PUNTATORE vengono aggiornati e inseriti i nuovi valori, ora mi chiedo non ho modificato assolutamente p , perchè mi scorre la lista come avessi inserito li l'indirizzo del prossimo valore all'interno di p?
Devi accedere o registrarti per scrivere nel forum
2 risposte