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;}

Rispondi quotando