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!