codice:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h> //Ho messo la libreria percè il true nel while mi da problemi.. Strano, perchè anche senza libreria funzionava..
struct elemento{ 
int valore; 
struct elemento *next;
};
void menu();
struct elemento *insElemento(struct elemento *); 
struct elemento *ordLista(struct elemento *);
void printElemento(struct elemento *);
struct elemento *searchlist(struct elemento *, int n);
struct elemento *Delete (struct elemento *, int DaEliminare);
int main(){
 struct elemento *Lista=NULL ; 
 int comando, x, i;
 do{
 menu(); 
 printf("\nComando:\t"); 
 scanf("%d", &comando); 
 
 switch(comando){  
 case 1:{   
 Lista=insElemento(Lista);   
 break;  
 }   
 case 2:{   
 Lista=ordLista(Lista);   
 break;  
 } 
 case 3:{
 printElemento(Lista);
 break;
 }
 case 4:{
  printf("\n\nInserisci il valore da cercare:\n\n");
  scanf("%d",&x);
  if(searchlist(Lista,x)!=NULL)
  printf("\n\nIl valore e' nella lista.\n\n");
  else
  printf("\n\nIl valore non e' nella lista.\n\n");
 break;
 }
 case 5:{
  printf("\n\nInserisci il valore da eliminare:\n\n"); 
  scanf("%d",&x);
  if(i!=NULL)
  i=Delete(Lista,x);
  else printf("\n\nErrore. Lista vuota.\n\n");
  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("4 - Cerca elememto Lista\n");
 printf("5 - Elimina elemento Lista\n"); 
 printf("--------------------------\n");
}
//INSERIMENTO LISTA
struct elemento *insElemento(struct elemento *list_head){    
struct elemento *list_pointer, *list_record;    
int i=2, n=0, val, newval; 
   
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; 
do{          
 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;
 printf("Inserire nuovo valore?");
 scanf("%d",&n);                 
}while(n==1);        
list_record->next = NULL;       
list_pointer = list_head;
printElemento(list_head);
return (list_head);
}  
//ORDINAMENTO LISTA
struct elemento *ordLista(struct elemento *list_head) {
struct elemento *list_pointer;
int flag, temp;  
flag = 1;  
while (flag == 1) {    
list_pointer = list_head;    
flag = 0;    
while (list_pointer->next != NULL) {      
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;    
}     
}      
printElemento(list_head);
return list_head;}
//CERCA ELEMENTO
struct elemento *searchlist(struct elemento *list_head,int n){       
while(list_head!=NULL && list_head->valore!=n)           
list_head=list_head->next;       
if(list_head->valore==n)           
return list_head;       
else            
return NULL;
}

//ELIMINA ELEMENTO
struct elemento *Delete(struct elemento *list_head, int DaEliminare){    
struct elemento *list_pointer, *list_record;
for(list_pointer=list_head, list_record=list_head; list_record!=NULL && list_record->valore!=DaEliminare; list_pointer=list_record, list_record=list_record->next); 
if(list_record->valore==DaEliminare) {      
if(list_record!=list_head)
{          
list_pointer->next=list_record->next;           
free(list_record);
return list_head;      
}      
else 
{          
list_pointer=list_record->next;            
free(list_record);
return list_pointer;            
} 
}   
return list_head;       
}
//STAMPA LISTA
void printElemento(struct elemento *Lista){ 
                                            
struct elemento *list_pointer = Lista;    
printf("\nlista -> ");         
while(list_pointer != NULL){            
printf("%d", list_pointer->valore);                
printf(" -> ");               
list_pointer = list_pointer->next;          
}     
printf(" NULL"); 
}
Sisi, ho anche utilizzato la funzione stampa.. e poi le altre..