Stavi assegnando valore che è un intero, a temp che è un puntatore.
Poi ho sostituito temp=aux con temp=p perchè in effetti stavo considerando solo la parte finale della lista.Per capirlo fai finta che è uguale a un vettore, dove temp e temp->succ sono adiacenti in memoria (anche se in realtà non è così).
Allora stai confrontando due elementi adiacenti del vettore.Se l' elemento i-esimo è maggiore dell' elemento (i+1)-esimo li scambi.
Eidt: Altra cosa,il confronto va fatto sui valori (il campo val), non sui puntatori.Così stai solo confrontando due indirizzi.Il che non ha senso.codice:void ordine(struct elemento *p) { int valore; struct elemento *aux,*temp; aux=p; while(aux->succ!=NULL){ temp=p; while(temp->succ!=NULL){ if(temp->val>temp->succ->val){ valore=temp->val; temp->val=valore; temp->succ->val=valore; } temp=temp->succ; } aux=aux->succ; }
Poi temp va scorso fuori dall' if, altrimenti lo scorri solo se il temp->val è maggiore di temp->succ->val.
Così dovrebbe essere ok, almeno spero.Dimmi se funziona![]()

Rispondi quotando