Salve mi scuso per il precedente post non conforme alle regole del forum ma sono giorni che lavoro a questo problema e non riesco a risolverlo!!!
Ho implementato un algoritmo per l'inserimento e la cancellazione di un nodo all'interno di una lista semplice ordinata
codice:
 #include <stdio.h> 
#include <stdlib.h>  s
truct nodo {   
 int elemento;              //campo che contiene il valore   
 struct nodo* next;         //campo che contiene il punt al prossimo nodo  
  };       
  //function che inserisce il nuovo nodo 
struct nodo* Insert(struct nodo* lista, int elemento);
 //function che stampa la lista per intero 
 void Stampa(struct nodo *lista); 
// function che conta gli elementi
 int contaC(struct nodo *lista); 
//controllo che non ci siano doppioni 
struct nodo * elimDoppi (struct nodo * lista);
 int presente (int elemento, struct nodo * lista);  
  int main() {   
//inizializzo la lista!!!   
 struct nodo* lista = NULL;      
 int totale=0;            
 lista = Insert(lista,9);  
 lista = Insert(lista,9);   
 lista = Insert(lista,31);  
 lista = Insert(lista,15);   
 lista = Insert(lista,1);   
 lista = Insert(lista,11); 
 lista = Insert(lista,15);       
  //stampo la lista con i doppioni!!!  
 printf("CON I DOPPIONI: \n ");    Stampa(lista);  
 lista = elimDoppi (lista);    
 //conto quanti elementi ho nella lista!!!  
 totale=contaC(lista);   
 printf("\n\n NUMERO DEGLI ELEMENTI DELLA LISTA = %d. \n", totale);      
 //stampo la lista senza doppioni!!!   
 Stampa(lista);          
 getchar();
     
 return(0);       
}  


struct nodo* Insert(struct nodo* lista, int elemento) {     
   struct nodo * nuovo= malloc(sizeof(struct nodo)); 
   //alloco nuovo nodo   
   nuovo->elemento = elemento;             
   //gli assegno un determinato valore          
               if(lista==NULL)    //lista nulla      {      
                   lista=nuovo;            
                   nuovo->next=NULL;              
                } else {                      
                  struct nodo *q=lista;           
                  if(nuovo->elemento < q->elemento)             {       
                        int appoggio=nuovo->elemento;            
                        nuovo->elemento= q->elemento;                    
                        q->elemento=appoggio;             
                }           

              while(q->next != NULL && q->next->elemento < nuovo->elemento){
                q=q->next;
               }                
              if(q->next==NULL){                                                                                     nuovo->next=NULL;                       
                    } else {                                              nuovo->next=q->next;                                       }                   q->next=nuovo;                                          }                                             return(lista);     }  //voglio eliminare i doppioni  struct nodo * elimDoppi (struct nodo * lista) {            if (lista == NULL) {//LISTA VUOTA        return (NULL);   } else {           if (presente(lista->elemento, lista->next)){                 return (elimDoppi(lista->next));                         } else {//RICORSIONE                               lista -> next = elimDoppi (lista -> next);             return (lista);           }   }              }    int presente (int elemento, struct nodo * lista) {   if (lista == NULL){ //LISTA VUOTA      return (0);         } else {                       if (lista->elemento ==elemento){ //LISTA 1 ELEMENTO            return (1);                     } else {//RICORSIONE                           return (presente (elemento, lista-> next));         }   }    }    //voglio contare quanti elementi ci sono in una lista int contaC(struct nodo *lista) {        struct nodo* startlista = lista;   	int totale=0; 	       while(startlista!=NULL)      {       startlista=startlista->next;             totale++;     } return totale; }  //FUNZIONE CHE STAMPA LA LISTA void Stampa(struct nodo * lista)  {      struct nodo * startlista= lista;     printf("LA LISTA E': \n ");               while(startlista!=NULL)     {     printf("%d ; ", startlista->elemento);     startlista=startlista->next;     }      printf("\n"); }