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:
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=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;
}
Ricapitolando
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!!!!!!