ciao a tutti,premetto di aver cercato sul forum,il problema è che mi sembrano situazioni troppo avanzate rispetto a quel poco che ho capito,perciò vi posto il mio codice.Ho provato una cosa che dovrebbe essere banalissima,ovvero cancellare un elemento(che io chiamo Nodo) dalla lista:
Ricapitolandocodice:#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=3; head->next=NULL; curr=malloc(sizeof(Nodo)); curr->dato=4; curr->next=NULL; head->next=curr; prec=curr; curr=malloc(sizeof(Nodo)); curr->dato=5; curr->next=NULL; prec->next=curr; prec=curr; curr=malloc(sizeof(Nodo)); curr->dato=6; curr->next=NULL; prec->next=curr; curr=head; while(curr->next!=NULL) { printf("\n%d\n\n",curr->dato); curr=curr->next; } printf("\n%d\n\n",curr->dato); //ABBIAMO ALLOCATO 4 NODI,ORA PROVIAMO A CANCELLARE IL TERZO head->next=prec; curr=prec->next; prec->next=curr->next; free(curr); curr=head; while(curr->next!=NULL) { printf("\n%d\n\n",curr->dato); curr=curr->next; } printf("\n%d\n\n",curr->dato); system("PAUSE"); return 0; }
alloco 4 nodi e inserisco i dati:
nodo1=3
nodo2=4
nodo3=5
nodo4=6
stampo:
3456
cancello il nodo 3
stampo:
35
qualcosa non va,mi stampa solo il nodo 1 e non capisco perchè il nodo 3 che è quello per cui credevo di aver fatto la free :| sono molto confuso a questo punto.
Attualmente dovrei avere
nodo1 -> nodo2 -> nodo4 -> NULL
*head *prec
*curr
quindi il while dovrebbe stamparli tutti tranne il nodo4...
Grazie a tutti ciao! buone feste!!!!!!

Rispondi quotando