Ciao a tutti. Ho realizzato un programma che inserirsce in una lista un elemento intero alla volta e lo inserisce rispettando l'ordine crescente dei numeri naturali.
La funzione ordina() grosso modo funziona. L'unico problema è che se l'elemento da inserire è più piccolo di tutti gli elementi presenti in lista, (quindi va inserito in testa), l'inserimento fallisce. Il programma non va in crash ma ignora proprio l'elemento e non lo inserisce.
Grazie a tutti. Ecco il codice:
codice:struct elemento *aggiungi_ordinato(struct elemento *p){ struct elemento *q; struct elemento *nuovo = NULL; struct elemento *prec = NULL; int i, x; system("cls"); if(p==NULL){ // se la lista e' vuota diventa primo elemento p = malloc(1*sizeof(struct elemento)); printf("\n\tInserisci informazione: \t"); scanf("%d", &p->info); p->next = NULL; } else{ // se la lista ha altri elementi q = p; printf("\n\tInserisci informazione: \t"); scanf("%d", &x); while((q!=NULL) && (x > q->info)){ prec = q; q = q->next; } nuovo = malloc(1*sizeof(struct elemento)); nuovo->info = x; if(q==NULL){ // siamo a fine lista prec->next = nuovo; nuovo->next = NULL; } if(prec==NULL){ //siamo a inizio lista - NON FUNZIONA E NON SI CAPISCE PERCHE' - nuovo->next = q; q = nuovo; } else{ // siamo in un punto qualsiasi prec->next = nuovo; nuovo->next = q; } } return(p); }