Allora grazie ai vostri consigli sono riuscito a capire gran parte del programma.. Ma restano due problemi:
1. Nella funzione ordLista quando stampo (manualmente - visto il problema successivo), mi stampa la lista ordinata tranne il primo elemento. ordinato..
Es.
Lista -> 4 -> 8 -> 3 -> 9 -> 2 -> NULL
Me lo ordina e mi stampa..
Lista -> 3 -> 4 -> 8 -> 9 -> NULL

2. Inoltre non riesco a creare la funzione stampa da utilizzare nelle varie funzioni e nel main(). Preticamente non so che parametri passare per rendere performante l'algoritmo

Questo è il codice:

codice:
#include <stdio.h>
#include <stdlib.h>
struct elemento{ 
int valore; 
struct elemento *next;
};
void menu();
struct elemento *insElemento(struct elemento *); 
struct elemento *ordLista(struct elemento *);
void printElemento();
int main(){
 struct elemento *Lista=NULL ; 
 int comando; 
 do{
 menu(); 
 printf("\nComando:\t"); 
 scanf("%d", &comando); 
 
 switch(comando){  
 case 1:{   
 Lista=insElemento(Lista);   
 break;  
 }   
 case 2:{   
 Lista=ordLista(Lista);   
 break;  
 } 
 case 3:{
 //PrintLista();
 break;
 }
 } 
}while(true);
return 0; 
}
void menu(){ 
 printf("\n--------------------------"); 
 printf("\n1 - Inserisci Elemento\n"); 
 printf("2 - Ordinamento Lista\n"); 
 printf("3 - Visualizza Lista\n"); 
 printf("--------------------------\n");
}
//Inserimento elementi lista
struct elemento *insElemento(struct elemento *list_head){    
struct elemento *list_pointer, *list_record;    
int i, n=0, val, newval; 
printf("Specificare il numero di elementi della lista:  "); 
scanf("%d", &n);    
list_record = (struct elemento *)malloc(sizeof(struct elemento));    
printf("\nInserisci il 1 elemento: ");    
scanf("%d", &val); 
list_record->valore = val; 
list_head=list_record; 
list_pointer = list_head; 
for(i=2; i<=n; i++){          
 list_record->next = (struct elemento *)malloc(sizeof(struct elemento));          
 list_record = list_record->next;          
 printf("\nInserisci il %d elemento: ", i);          
 scanf("%d", &newval);          
 list_record->valore = newval;                 
}        
list_record->next = NULL;       
list_pointer = list_head;
 
//Stampa della lista 
printf("\nlista -> "); 
while(list_pointer != NULL){    
printf("%d", list_pointer->valore);        
printf(" -> ");       
list_pointer = list_pointer->next;    
} 
printf(" NULL");     
return list_head; 
}  
struct elemento *ordLista(struct elemento *list_head) {
struct elemento *list_pointer, *list_record;
int flag, temp;
list_record = NULL;
  flag = 1;
  while (flag == 1) {
    list_pointer = list_head;
    flag = 0;
    while (list_pointer->next != list_record) {
      if (list_pointer->valore > (list_pointer->next)->valore) {
        temp = list_pointer->valore;
        list_pointer->valore = (list_pointer->next)->valore;
        (list_pointer->next)->valore = temp;
        flag = 1;
      }
      list_pointer = list_pointer->next;
    }
    list_record = list_pointer;
  }
 //printElemento();  
  return list_head;
}
struct printElemento(){
struct elemento *list_pointer
printf("\nlista -> "); 
while(list_pointer != NULL){    
printf("%d", list_pointer->valore);        
printf(" -> ");       
list_pointer = list_pointer->next;     
} 
printf(" NULL"); 
}
Ah dimenticavo, grazie per le risposte precedenti..