Ciao a tutti,stavo tentando di fare una funzione in c per lo spostamento dei nodi,o meglio,dati due nodi scambiarli di posto.

codice:
void Swap(NODO **head,int s,int n)//FUNZIONE PER LO SPOSTAMENTO,s ed n sono i nodi che vogliamo invertire di posto
{
     NODO *curr;
     NODO *prev;
     NODO *jolly;//dopo diverse prove risulta davvero difficile effettuare queste operazioni con soli tre puntatori,è possibile ma a un certo punto mi sono ritrovato costretto
                 // a scollegare un nodo ancor prima di aver collegato il suo precedente al suo successivo
     int i,j;
     
     curr=prev=jolly=*head;
     
     for(i=0;i<n;i++)
     {                              
                     if(i<n-1) // curr si ferma sulla posizione n-esima e prev su quella appena
prima
                     {
                              prev=curr;
                     }
                     curr=curr->next;
     }
     for(j=0;j<s;j++) 
     {
                    jolly=jolly->next;
     }                                      //jolly si ferma alla posizione s-esima
  
      (*head)->next=jolly->next;
      prev->next=curr->next;
      jolly->next=curr->next;
      prev->next=jolly;
      curr->next=(*head)->next->next;
      (*head)->next=curr; 
                                 
}
Il problema è che il programma rimane "intrappolato" nella stampa.Per esempio,se abbiamo 5 (1,2,3,4,5) nodi e voglio scambiare il 2 con il 4,mi stamperà 1,4,4,4,4,......
Mi veniva da pensare che avessi collegato a se stesso il 4 e lo stamp (avendo il compito di stampre il contenuto dei nodi finché nodo->next!=NULL) quindi continuasse senza sosta a stampare....Inizialmente avevo chiamato il puntatore jolly perchè dovevo spostarlo parecchio ma poi...
Grazie!