Salve a tutti, ho implementato una funzione che data in ingresso una lista ordinata restituisce la lista senza i nodi che contengono i numeri pari al suo interno.In sostanza la funzione itera tramite un while e appena trova un elemento dispari nel nodo lo elimina.La stuttura interna si divide in due casi, la cancellazione in testa e quella non in testa alla lista.
Quando chiamo la funzione oltre ai valori corretti mi stampa anche dei valori casuali e non riesco a capire il perchè.
Posto il codice della funzione.



codice:
Tipo_lista cancella_tutti_pari(Tipo_lista l)
{
 Tipo_lista Prec, Succ;
 Prec = NULL;
 Succ = l;
 if (Succ == NULL)
  return l;
 while (Succ != NULL)
  {
     if (Succ->Value %2 == 0)
        {
         Tipo_lista Temp = NULL;
          if (Prec == NULL)
             {
              Temp = l;
              l = Succ->Next;
              free(Temp);
              }
          else
              {
              Temp = Succ;
              Succ = Succ->Next;
              free(Temp);
              }
         }
       else
         {
         Prec = Succ;
         Succ = Succ->Next;
         }
   }
     return l;
 }

posto anche la definizione della stuttura, i prototipi, il main e le altre due funzioni di stampa e di inserimento.

codice:
#include <stdio.h>
#include <stdlib.h>

// definizione della struttura

struct Tag_nodo
{
 int Value;
 struct Tag_nodo *Next;
};

typedef struct Tag_nodo Tipo_nodo;
typedef Tipo_nodo *Tipo_lista;

// prototipi delle funzioni

Tipo_lista insert(Tipo_lista l, int val);
Tipo_lista cancella_tutti_pari(Tipo_lista l);
void stampa(Tipo_lista l);

//main

int main()
{
  Tipo_lista l = NULL;

  l = insert(l, 3);
  l = insert(l, 6);
  l = insert(l, 8);
  l = insert(l, 5);
  l = insert(l, 12);
  

  stampa(l);

  l = cancella_tutti_pari(l);

  stampa(l);

      system("PAUSE");
      return 0;
}

Tipo_lista insert(Tipo_lista l, int val)
 {
   if ((l == NULL) || (l->Value > val))    
     {
      Tipo_lista Temp;
      Temp = (Tipo_lista)malloc(sizeof(Tipo_nodo));
      if (Temp == NULL)
       {
        printf("Errore di allocazione nodo nella memoria");
        exit(1);
       }
       Temp->Value = val;
       Temp->Next = l;
       return Temp;
       }
   else
    {
     l->Next = insert(l->Next, val);
     return l;
    }
  }




void stampa(Tipo_lista l)
{
 if (l == NULL)
   printf("Lista vuota\n");
 else
  {
    while ( l != NULL)
     {
      printf("%d\n", l->Value);
      l = l->Next;
     }
  }
}


grazie