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