Sto provando a scambiare gli indirizzi di due nodi adiacenti in un elenco collegato. Ho provato a scambiare i loro valori, usando una variabile int temp e funziona perfettamente bene. Ma ora, voglio scambiare due indirizzi con i puntatori. Sfortunatamente, ha creato un ciclo infinito all'interno del mio ciclo while. Ecco il mio frammento di codice:Confusione sui puntatori C (Elenco collegato)
Utilizzando int: // funzionato perfettamente bene
node* swapNumbers(node* head, int data){
int temp;
node *cursor = head;
while(cursor!=NULL){
if(cursor->data == data){
temp = cursor->data;
cursor->data = cursor->next->data;
cursor->next->data = temp;
//printf("1: %d\n", cursor->data);
//printf("2: %d\n", cursor->next->data);
return cursor;
}
cursor = cursor->next;
}
return NULL;
}
Utilizzando gli indirizzi: // Questo ha creato un ciclo infinito!
node* swapNumbers(node* head, int data){
node *temp = NULL;
node *cursor = head;
while(cursor!=NULL){
if(cursor->data == data){
temp = cursor;
cursor = cursor->next;
cursor->next = temp;
return cursor;
}
cursor = cursor->next;
}
return NULL;
}
mia typedef struct contiene quanto segue:
typedef struct node
{
int data;
struct node* next;
} node;
Sono nuovo di C e puntatori sono ancora mi confondo. Qualsiasi aiuto sarà apprezzato!
Disegna un diagramma: crea riquadri con linee e frecce che rappresentano i puntatori successivi. Al fine di invertire due nodi in un elenco collegato, è necessario modificare il puntatore nel nodo * precedente * (o la testata dell'elenco se nessun nodo precedente), nonché i due nodi scambiati. –
si trova la risposta qui: [Scambia i nodi in un elenco collegato singolarmente] (http: // stackoverflow.it/questions/15315914/swap-nodes-in-a-singly-linked-list/15316061 # 15316061) –