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