Non capisco questa parte:
codice:
if(temp->val>temp->succ->val){
                                            valore=temp->val;
                                            temp->val=valore;
                                            temp->succ->val=valore;
                                            }
Ok il confronto dell'if ci sono ma xkè prima copi il valore temp->val in valore e poi viceversa copi valore in temp->val??? Così hai che temp->val e valore sono uguali.
Non dovrebbe essere
codice:
valore=temp->val;
temp->val=(temp->succ)->val;
(temp->succ)->val=valore;
o sbaglio?? (probabile)