Non funziona la funzione ordina! qualcuno può aiutarmi?

codice:
# include <stdlib.h>
# include <stdio.h>

typedef struct nodo *lista;
typedef struct nodo {
        int val;
        lista next;
        }nodo;
        
lista leggiLista (void);
lista ordina(lista L);
void stampaLista (lista L);

int main (void)
{
    lista lis;
    lis=leggiLista();
    stampaLista(lis);
    lis=ordina(lis);
    stampaLista(lis);
    system("PAUSE");
    return 0;
}


lista leggiLista (void)
{
      lista N,L=NULL;
      int val;
      while (1)
      {
            printf("inserisci valore: ");
            scanf("%d",&val);
            if (val==0) break;
             N=(nodo *)malloc (sizeof(nodo));
            if(!N)
                {
                   printf("non c'è spazio");
                   break;
                }
          N->val=val;
          N->next=L;
          L=N;
      }
      return L;
}


lista ordina (lista L)
{
    int valore;
    nodo *temp;
    temp=L->next;
    while(temp!=NULL)
    {
       if(L->val>temp->val)
       {
          valore=L->val;
          L->val=temp->val;
          temp->val=valore;
       }
       temp=temp->next;
    }
    return L;
}
    
    

void stampaLista (lista L)
{
      while(L!=NULL)
      {
      printf("\n%d\n",L->val);
      L=L->next;
      }
      printf("----------------------------");
}