Quando cerco di stampare a video gli elementi della mia testa, mi accorgo che esce sempre 0 e non riesco a capire il motivo.


main.cpp

codice:
#include <cstdlib>
#include <iostream>
#include "prova.h"

using namespace std;

int main(int argc, char *argv[])
{
    //VARIABILI
    Pnodo testa;//creo la testa (puntatore record)
    testa=0;//inizializzi la testa a 0
    int n;//numero massimo di valore da inserire nella lista
    int x;//valore che si inserirà nel for
    
    cout<<"Quanti valori vuoi inserire nella lista? Inserisci: ";
    cin>>n;
    
    for (int i=0; i<n; i++)
      {
             cout<<"Inserisci il " <<i <<"^ valore: ";
             cin>>x;
             push(testa,x);//inserimento in testa alla lista;
      }
    

    cout<<"La lista inserita e':\n";
    for (int i=0; i<n; i++)
      {
             cout<<"Il " <<i <<"^ valore e': " <<endl;
             stampa(testa,x);//stampa dalla testa
      }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
prova.h

codice:
#ifndef prova_h
#define prova_h
typedef struct nodo *Pnodo;
typedef struct nodo{
        int elemento;
        Pnodo successivo;
        };
        
void push(Pnodo &,int &);//inserimento in testa alla lista;
void stampa(Pnodo &,int &);//stampa dalla testa

#endif

prova.cpp
codice:
#include <cstdlib>
#include <iostream>
#include "prova.h"

using namespace std;

void push(Pnodo &nuovaTesta,int &x)//inserimento in testa alla lista;
{
     Pnodo nuovo = new nodo; //alloco spazio in memorie heap
     nuovo->elemento = x; //associo il valore x;
     nuovo->successivo = nuovaTesta; //lo lego alla lista
     nuovo = nuovaTesta; //diventa la nuova testa
     cout<<nuovaTesta;
}

void stampa(Pnodo &nuovaTesta,int &x)//stampa dalla testa
{
     Pnodo temp;
     temp = nuovaTesta;
     while(temp!=0)
      {
         cout << temp->elemento;
         temp = temp->successivo;
      }
}