Avresti potuto anche postare un po' di contesto...
In ogni caso nel tuo codice mancano dei controlli su alcuni casi NULL, il malloc all'inizio è inutile (ed anzi causa un memory leak), la logica è sovracomplicata...
Qui puoi vedere un esempio completo compreso, compreso il main usato per il test e, soprattutto, le strutture dati che vanno sempre postatecodice:#include <stdio.h> #include <stdlib.h> typedef struct El { int i; struct El *next; } Elemento; typedef Elemento *Lista; void Dis(Lista *lista) { Lista tmp = *lista; Lista tmp1; while((tmp != NULL) && (tmp->i % 2 == 0)) { tmp1 = tmp; tmp = tmp->next; free(tmp1); } *lista = tmp; while(tmp) { if((tmp->next) && (tmp->next->i % 2 == 0)) { tmp1 = tmp->next; tmp->next = tmp->next->next; free(tmp1); } tmp = tmp->next; } } int main() { Lista l = NULL, tmp; int i; for(i = 9; i > 0; i--) { tmp = (Lista)malloc(sizeof(Elemento)); tmp->next = l; tmp->i = i; l = tmp; } Dis(&l); while(l) { printf("%d,", l->i); tmp = l; l = l->next; free(tmp); } return 0; }

Rispondi quotando