#include<stdio.h>
#include<stdlib.h>
typedef struct type_nodo{
                         int num;
                         struct type_nodo *prox;
                         };
type_nodo *crea_lista();
void leggi_lista(type_nodo *);
int elimina_elemento(type_nodo *);
/*************************main*********************  ****/
main(){
       type_nodo *testa=NULL;
       int scelta=0;
       int elemento=0;
       while(1){
                printf("\n1 - Crea lista");
                printf("\n2 - Visualizza lista");
                printf("\n3 - Elimina elemento\n\n");
                scanf("%d",&scelta);
                switch(scelta){
                               case 1:
                                      system("CLS");
                                      testa=crea_lista();
                                      break;
                               case 2:
                                      system("CLS");
                                      leggi_lista(testa);
                                      break;
                               case 3:
                                      elimina_elemento(testa);
                                      break;
                               default:
                                       printf("\nScelta non valida");
                                       break;
                               }
                
                system("PAUSE");
                system("CLS");
                }
       
}
/************************Crea lista****************************/
type_nodo *crea_lista(){
          
          type_nodo *testa=NULL;
          type_nodo *paus=NULL;
          int scelta=0,i=0;
          
          printf("\tCreazione lista\n\n");
          printf("\nQuanti elementi vuoi inserire? ");
          scanf("%d",&scelta);
          
          testa=(type_nodo *)malloc(sizeof(type_nodo));
          if(testa==NULL){
                          printf("\nMemoria esaurita");
                          return testa;
                          }
          if(scelta==0){
                        printf("\nLista non creata");
                        return testa;
                        }
          printf("Inserisci il 1 elemento ");
          scanf("%d",&testa->num);
          testa->prox=NULL;
          if(scelta==1) return testa;
          paus=testa;
          for(i=2;i<=scelta;i++){
                                 paus->prox=(type_nodo *)malloc(sizeof(type_nodo));
                                 paus=paus->prox;
                                 printf("Inserisci il %d elemento ",i);
                                 scanf("%d",&paus->num);
                                 paus->prox=NULL;
                                 }
          return testa;
          }
/*********************visualizza lista***********************/
void leggi_lista(type_nodo *testa){
     
     if(testa==NULL) printf("\nLa lista è vuota");
     
     type_nodo *paus=NULL;
     paus=testa;
     printf("\n");
     while(paus!=NULL){
                       printf("%d\t",paus->num);
                       paus=paus->prox;                  
                       }
     printf("\n\n");
     }
/******************elimina elemento**************************/
int elimina_elemento(type_nodo *testa){
     
     
     int elemento=0;
     if(testa==NULL){
                     printf("La lista e' vuota\n\n");
                     return 0;
                     }
     leggi_lista(testa);
     printf("Quale elemento vuoi eliminare? ");
     scanf("%d",&elemento);
     
     type_nodo *paus=NULL;
     
     paus=testa;
     
     if(paus->num==elemento){
                             testa=testa->prox;
                             free(paus);
                             printf("%d",testa->num);
                             }
     else{
          while(paus->prox->num!=elemento){
                                           paus=paus->prox;
                                           if(paus=NULL){
                                                         printf("Elemento non trovato");
                                                         return 0;
                                                         }
                                           }
          type_nodo *pfree=NULL;
          pfree=paus->prox;
          paus->prox=paus->prox->prox;
          free(pfree);
         }
     }