Saaalve. Vi scrivo per chiedervi una mano riguardo per risolvere il problema del mio codice..
Praticamente ho provato di tutto.. ma non riesco proprio a far funzionare la RICERCA e l'ELIMINAZIONE degli elementi.. Qualche consiglio?

Ecco il mio 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(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(i,x)!=NULL)
  printf("\n\nIl valore 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(i,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;
       return list_head;
}
//ELIMINA ELEMENTO
struct entry *Delete (struct entry *list_head, int DaEliminare)
{
 struct entry *list_record,*list_pointer;
 for(list_pointer=NULL, list_record=list_head; list_record!=NULL && list_record->valore!=DaEliminare; list_pointer=list_record, list_record=list_record->next)
 
     if(list_record==NULL)
           return list_head;
           
       if(list_pointer==NULL)
           list_head=list_head->next;
       else
           list_pointer->next=list_record->next;
           
       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"); 
}