Ciao. Innanzitutto grazie per la risposta.
Scusatemi per non aver utilizzato i tag ma non lo sapevo.
Hai ragione quando dici che il problema è sulla funzione ordina, infatti, come dici tu, all'ultima iterazione punta alla coda della lista che non ha un nodo prossimo.
Alla fine ho capito cosa mancava: far partire temp dalla testa della lista all'inizio di ogni iterazione del ciclo for esterno. Inoltre,l'istruzione temp=temp->next andava va messa alla fine del primo ciclo for.
Posto il codice della funzione ordina corretto:
codice:
void ordina(polinomio *list) { 
    polinodo *temp; 
    temp=list->header; 
    double c; 
    unsigned int e; 
    cout<<list->count<<endl; 
    for(int i=0;i<(list->count);i++) { 
           for(int j=0;j<(list->count)-1;j++) { 
               if(temp->espon<temp->next->espon) { 
                   c=temp->coeff; 
                   e=temp->espon; 
                   temp->espon=temp->next->espon; 
                   temp->coeff=temp->next->coeff; 
                   temp->next->coeff=c; 
                   temp->next->espon=e;
                       } 
               temp=temp->next; 
              }
        temp=list->header; 
     }
 }