si penso che mi stiate sopravvalutando,ho provato a inventarmi un esercizio a caso(devo smetterla di inventare esercizi a caso),l'esercizio vuole che io scambi di posto due nodi in una piccola struttura con 5 nodi,in particolare il nodo2 col nodo4:
codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct Nd{
int dato;
struct Nd *next;
}Nodo;
int main()
{
Nodo *head;
Nodo *curr;
Nodo *prec;
head=malloc(sizeof(Nodo));
head->dato=10;
head->next=NULL;
curr=malloc(sizeof(Nodo));
curr->dato=20;
curr->next=NULL;
prec=curr;
head->next=curr;
curr=malloc(sizeof(Nodo));
curr->dato=30;
curr->next=NULL;
prec->next=curr;
prec=curr;
curr=malloc(sizeof(Nodo));
curr->dato=40;
curr->next=NULL;
prec->next=curr;
prec=curr;
curr=malloc(sizeof(Nodo));
curr->dato=50;
curr->next=NULL;
prec->next=curr;
printf("\n contenuto dei 5 nodi: \n");
curr=head;
while(curr->next!=NULL)
{
printf("\n %d \n",curr->dato);
curr=curr->next;
}
printf("\n %d \n",curr->dato);
//QUELLO CHE VOGLIO FARE ORA E' SPOSTARE IL NODO 2 CON IL NODO 4
//PER PRIMA COSA PROVO A SPOSTARE IL NODO2 TRA IL 4 E IL 5,PRIMA ASSICURIAMOCI DI COLLEGARE L'1 AL 3
prec=head->next;
head->next=prec->next;
curr=head->next->next;
prec->next=curr->next;
head->next->next=prec;
curr->next=head->next;
head->next=curr;
printf("\n\n ora inverto di posto il nodo 2 con il nodo 4: \n");
curr=head;
while(curr->next!=NULL);
{
printf("\n %d\n",curr->dato);
curr=curr->next;
}
printf("\n %d\n",curr->dato);
system("PAUSE");
return 0;
}
dopo la prima stampa abbiamo:
head-> [1]
prec-> [4]
curr-> [5]
per spostare i due nodi ho fatto questo(o almeno è quello che credevo di fare,corrisponde alla parte appena dopo la "descrizione" nel programma):
- prec->[2]
- [1]->[3] (intendo che collego il nodo1 al nodo3)
- curr->[4]
- [2]->[5]
- [3]->[2]
- [4]->[3]
- [1]->[4]
Deve essere piuttosto difficile per voi senza tutti i disegnini che ho fatto :|,spero si capisca
Il problema è il seguente,da quello che stampa,o meglio da quello che non stampa, non risultano collegati il nodo 4 con il nodo3,ho provato a fargli stampare con un if quelli con curr->next!=NULL e mi stampa solo 10.
Ora sono triste
ero convintissimissimo