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!!!!!!