Credo che ci sia un problema con il collegamento che collega al primo.

Vi posto il mio codice:

codice:
#include <iostream>

using namespace std;


struct nodo{
       int key;
       nodo* next;};
typedef nodo* pnodo;

pnodo cons(int x, pnodo testa); //per creare un elemento
void stampa(pnodo testa); //stampa la lista 
pnodo leggi(); // legge da tastiera
bool cambia(nodo *n1, nodo*n2); 

pnodo cons(int x, pnodo testa){
   pnodo nuovo=new nodo;
   nuovo->key=x;
   nuovo->next=testa;
   return nuovo;
}


void stampa(pnodo testa){
     pnodo p;
     for(p=testa;p!=0;p=p->next)
        cout << p->key << " ";
}

pnodo leggi(){
   int x;
   pnodo testa,ultimo;
   int n,i;
   cout << "Inserire il numero di elementi: ";
   cin >> n;
   if(n==0) return 0;
   for(i=0;i<n;i++){
      cout << "Inserire il "<< i+1 <<" elemento: ";
      cin >> x;
      if(i==0){
         testa=cons(x,0);
         ultimo=testa;
      }else{
         pnodo nuovo=cons(x,0);
         ultimo->next=nuovo;
         ultimo=nuovo;
      }
   }
   return testa;
}

bool cambia(nodo *n1, nodo*n2) {
  if ( n1 && n2 ) {
    nodo * t = n1->next;
    n1->next = n2->next;
    n2->next = t;
    return true;
  }
  else
    return false;
}

int main(){
    pnodo a=leggi();
    cambia(a,a->next);
    stampa(a);
    return 0;
}
Vi posto l'output:

codice:
Inserire il numero di elementi: 4
Inserire il 1 elemento: 2
Inserire il 2 elemento: 3
Inserire il 3 elemento: 4
Inserire il 4 elemento: 5
2 4 5
Non capisco perchè!