Ciao a tutti!
Un esercizio di programmazione chiede di implementare due funzioni: la prima ricorsiva per eliminare certi elementi da una lista secondo una data condizione, la seconda iteritiva, sempre per eliminare altri elementi.
Ho scritto questo codice ma mi dà due problemi:
se devo eliminare il primo elemento va in segmentation fault e quando stampo, stampa solo l'ultimo elemento della lista.
Riuscite a trovare dove sbaglio?
codice:
typedef struct partecipante {
char nome;
int laurea;
int pubblicazioni;
struct partecipante *next;
} partecipante;
void eliminacandidatiric (partecipante **lista){
partecipante *aux;
if (*lista!=NULL){if ((*lista)->laurea==0) {aux=*lista;
*lista=(*lista)->next;
free(aux);
eliminacandidatiric(lista);}
else eliminacandidatiric(&((*lista)->next));}
}
void shortlist(partecipante **lista){
partecipante *corr;
partecipante *prec;
partecipante *aux;
if (*lista!=NULL) {while ((*lista)->pubblicazioni<3){aux=*lista;
*lista=(*lista)->next;
free(aux);}
if (*lista!=NULL){prec=*lista;
corr=prec->next;
while (corr!=NULL) {if (corr->pubblicazioni<3){prec->next=corr->next;
free(corr);
corr=prec->next;}
else {prec=prec->next;
corr=corr->next;}
}
}
}
}
void stampa(partecipante *lista1){
partecipante *aux;
aux=lista1;
while (aux!=NULL){printf("(%c,%d,%d) ",aux->nome, aux->laurea, aux->pubblicazioni);
aux=aux->next;}
}
partecipante * crealista(){
char risp1;
char risp2;
partecipante *inizio;
partecipante *aux;
printf("La lista è vuota?\n");
scanf(" %c", &risp1);
if (risp1=='y') return NULL;
else {inizio=malloc(sizeof(partecipante));
printf("Inserisci il nome\n");
scanf(" %c", &inizio->nome);
printf("E' laureato?\n");
scanf("%d",&inizio->laurea);
printf("Quanti testi ha pubblicato?\n");
scanf("%d", &inizio->pubblicazioni);
aux=inizio;}
printf("Ci sono altri elementi? y or n?\n");
scanf(" %c", &risp2);
while (risp2!='n'){aux->next=malloc(sizeof(partecipante));
aux=aux->next;
printf("Inserisci il nome\n");
scanf(" %c", &inizio->nome);
printf("E' laureato?\n");
scanf("%d",&inizio->laurea);
printf("Quanti testi ha pubblicato?\n");
scanf("%d", &inizio->pubblicazioni);
printf("Ci sono altri elementi? y or n?\n");
scanf(" %c", &risp2);}
aux->next=NULL;
return inizio;}