Salve a tutti, ho un problema con questo codice!
Devo scrivere un programma che
1) generi un numero casuale x compreso tra 20 e 31
2)crei una lista di x nodi tale che ogni nodo contiene un numero naturale tra 1 e 20 generato casualmente
3)cancella dalla lista tutti i nodi contenenti un numero dispari.
Allora questo è il mio codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct nodo{int valore;
struct nodo *succ};
struct nodo *inserisci(struct nodo *l, int x);
struct nodo *cancella(struct nodo *l,int x);
int main(void)
{
int x,i,t;
srand(time(NULL));
struct nodo *lista;
t=20+rand()%31;
for(i=0;i<t;i++)
{
x=rand()%21;
lista=inserisci(lista,x);
}
stampa(lista);
for(i=0;i<t;i++)
if (x%2!=0) lista=cancella(lista,x);
stampa(lista);
return 0;
}
struct nodo *inserisci(struct nodo *l,int x)
{
struct nodo *nuovo;
nuovo=malloc(sizeof(struct nodo));
nuovo->valore=x;
nuovo->succ=l;
return nuovo;
};
void stampa(struct nodo *l)
{
while(l!=NULL)
{
printf("%d\n",l->valore);
l=l->succ;
}
}
struct nodo *cancella(struct nodo *l,int x)
{
struct nodo *ultimo,*corr,*p;
ultimo=NULL;
corr=l;
while((corr!=NULL) && (corr->valore=x))
{
ultimo=corr;
corr=corr->succ;
}
if(corr!=NULL)
if((corr->succ==NULL) && (ultimo==NULL))
{
free(corr);
return NULL;
}
else if(ultimo==NULL)
{
p=corr->succ;
free(corr);
return p;
}
else {ultimo->succ=corr->succ;
free(corr);
return l;}
else return l;
};
Soltanto che quando lo avvio mi genera la lista ma non termina. Dove potrebbe essere l'errore? Devo aggiungere una funzione che cerchi gli elementi dispari prima di cancellarli?
Grazie a chi risponderà