16/03/09 12:56
Chiara87
Ciao!
Dovrei scrivere una funzione che permette di eliminare tutti gli elementi pari da una lista di numeri interi (il cui inserimento termina con 0).
Il problema sta solo nella funzione EliminaPari. Funziona in modo corretto quando la lista inserita inizia con un numero dispari. Se metto però il primo numero pari questo viene saltato e poi gli altri numeri pari vengono eliminati correttamente....
Non riesco però a capire come cancellare il primo elemento se è pari..
Qualcuno mi potrebbe aiutare?! Scusate ma sono alle prime armi con liste e puntatori e sto impazzendo a cercare di capire come eliminare questo primo elemento..
Grazie ^^
Chiara
Dovrei scrivere una funzione che permette di eliminare tutti gli elementi pari da una lista di numeri interi (il cui inserimento termina con 0).
Il problema sta solo nella funzione EliminaPari. Funziona in modo corretto quando la lista inserita inizia con un numero dispari. Se metto però il primo numero pari questo viene saltato e poi gli altri numeri pari vengono eliminati correttamente....
Non riesco però a capire come cancellare il primo elemento se è pari..
Qualcuno mi potrebbe aiutare?! Scusate ma sono alle prime armi con liste e puntatori e sto impazzendo a cercare di capire come eliminare questo primo elemento..
Grazie ^^
Chiara
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <malloc.h> typedef struct nl { int val; struct nl* next; } NODOLISTA; int v; NODOLISTA *InsertLista (NODOLISTA *l, int v) { if (l == NULL) { NODOLISTA* t = (NODOLISTA *) malloc(sizeof(NODOLISTA)); if (t != NULL) { t->val = v; t->next = NULL; } return t; } else { l->next = InsertLista(l->next, v); return l; } } NODOLISTA *InsertValore (NODOLISTA *l) { printf("INSERISCI UN VALORE (TERMINI CON 0)"); scanf ("%d", &v); if (v == 0) printf ("\n\nLISTA->NULL\n\n"); while (v != 0) { if (v != 0) l = InsertLista(l, v); scanf ("%d", &v); } return l; } NODOLISTA *EliminaPari (NODOLISTA *l) { NODOLISTA *la=l, *lb; if (la != NULL) { while (la->next != NULL) { if (la->next->val % 2 != 0) //dispari// { la = la->next; } else { lb = la->next; la->next = la->next->next; free(lb); } continue; } } return l; } void StampaLista (NODOLISTA *l) { if (l != NULL) { printf("%d\n", l->val); StampaLista(l->next); } } int main () { NODOLISTA* lInt = NULL; lInt = InsertValore (lInt); lInt = EliminaPari (lInt); StampaLista (lInt); system ("PAUSE"); return 0; }
aaa