- import java.io.*; 
- import javax.swing.*; 
-   
- public class Lista 
- { 
-    
-   private Nodo P,Q,T,X,R; 
-   boolean Flag; 
-   int Refer; 
-   BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in)); 
-    
-   private class Nodo 
-   { 
-     private int Informacion; 
-     private Nodo Enlace; 
-     } 
-    
-   Lista() 
-   { 
-     Refer=0; 
-    
-     P=null; Q=null; R=null; T=null; X=null; 
-      
-   } 
-    
-   public void InsertarInicio(int Dato) 
-   { 
-       Nodo Q=new Nodo(); 
-       Q.Informacion=Dato; 
-       Q.Enlace=P; 
-       P=Q; 
-       System.out.println("\nInsercion hecha\nRecorre la lista para verificar los datos"); 
-   } 
-    
-   public void InsertarFinal(int Dato) 
-   { 
-     T=P; 
-     while(T.Enlace!=null) 
-     {T=T.Enlace;} 
-      
-     Nodo Q=new Nodo(); 
-     Q.Informacion=Dato; 
-     Q.Enlace=null; 
-     T.Enlace=Q; 
-     System.out.println("\nInsercion hecha\nRecorre la lista para verificar los datos"); 
-   } 
-   public void Recorrer() 
-   {System.out.println("\nLISTA DE DATOS "); 
-     if(P!=null) 
-     { 
-       Q=P; 
-       while(Q!=null) 
-       { 
-         System.out.println("\n\t"+Q.Informacion+""); 
-         Q=Q.Enlace; 
-       } 
-     } 
-     else  
-     System.out.println("\nNo Hay Datos en la Lista"); 
-   } 
-    
-   public void InsertarAntes(int Refer,int Dato) 
-   { 
-     Q=P; 
-     Flag=true; 
-     while((Q.Informacion!=Refer)&&(Flag==true)) 
-     { 
-       if(Q.Enlace!=null) 
-       { 
-         T=Q; 
-         Q=Q.Enlace; 
-       } 
-       else{ 
-         Flag=false;   
-       System.out.println("\nNo existe la referencia");} 
-     } 
-    
-   if(Flag==true) 
-   { 
-     Nodo X=new Nodo(); 
-     X.Informacion=Dato; 
-     if(P==Q) 
-     { 
-       X.Enlace=P; 
-       P=X; 
-       System.out.println("Insercion hecha\nRecorre la lista para verificar los datos"); 
-     } 
-     else 
-       T.Enlace=X; 
-       X.Enlace=Q; 
-       System.out.println("Insercion hecha\nRecorre la lista para verificar los datos"); 
-   } 
-   } 
-    
-   public void InsertarDespues(int Refer,int Dato) 
-   { 
-     Q=P; 
-     Flag=true; 
-     while((Q.Informacion!=Refer)&&(Flag==true)) 
-     { 
-       if(Q.Enlace!=null) 
-       { 
-         Q=Q.Enlace; 
-       } 
-       else 
-       { 
-         Flag=false; 
-         System.out.println("\nNo existe la referencia"); 
-       } 
-     } 
-     if(Flag==true) 
-     { 
-       Nodo T=new Nodo(); 
-       T.Informacion=Dato; 
-       T.Enlace=Q.Enlace; 
-       Q.Enlace=T; 
-       System.out.println("Insercion hecha\nRecorre la lista para verificar los datos"); 
-     } 
-   } 
-    
-   public void EliminaPrimero() 
-   { 
-       Q=P; 
-       if(Q.Enlace!=null) 
-         { 
-          P=Q.Enlace; 
-          Q=null; 
-         } 
-       else 
-        P=null; 
-        System.out.println("Eliminacion hecha..!!\nRecorre la lista para verificar los datos"); 
-   } 
-    
-   public void ElminaUltimo() 
-   { 
-       if(P.Enlace==null) 
-        { 
-         P=null; 
-        } 
-       else 
-       Q=P; 
-    while(Q.Enlace!=null) 
-    { 
-        T=Q; 
-       Q=Q.Enlace; 
-    } 
-      T.Enlace=null; 
-      Q=null; 
-      System.out.println("Eliminacion hecha..!!\nRecorre la lista para verificar los datos"); 
- } 
-   
-   public void EliminaX(int X) 
-   { 
-     Q=P; 
-     Flag=true; 
-     while((Q.Informacion!=X)&&(Flag==true)) 
-     { 
-       if(Q.Enlace!=null) 
-       { 
-         T=Q; 
-         Q=Q.Enlace; 
-       } 
-       else 
-         Flag=false; 
-     } 
-     if(Flag==false) 
-     { 
-       System.out.println("\nNo esxiste el elemento X"); 
-     } 
-     else 
-       if(P==Q) 
-       { 
-         P=Q.Enlace; 
-       } 
-       else 
-         T.Enlace=Q.Enlace; 
-         Q=null; 
-         System.out.println("El elemento "+X+ " fue encontrado\nEliminacion hecha..!!" 
-         +"\nRecorre la lista para verificar los datos"); 
-   } 
-    
-   public void EliminaAntesX(int X) 
-   { 
-     if(P.Informacion==X) 
-     { 
-       System.out.println("\nNo hay nodo que preceda a X"); 
-     } 
-     else 
-       Q=P; 
-       T=P; 
-       Flag=true; 
-     while((Q.Informacion!=X)&&(Flag==true)) 
-     { 
-       if(Q.Enlace!=null) 
-       { 
-         R=T; 
-         T=Q; 
-         Q=Q.Enlace; 
-       } 
-       else 
-         Flag=false; 
-     } 
-     if(Flag==false) 
-     { 
-       System.out.println("\nNo existe el elemento X"); 
-     } 
-     else 
-       if(P.Enlace==Q) 
-       { 
-         P=Q; 
-         T=null; 
-         System.out.println("El elemento "+X+ " fue encontrado\nEliminacion hecha..!!" 
-         +"\nRecorre la lista para verificar los datos"); 
-       } 
-       else 
-         R.Enlace=Q; 
-         T=null; 
-         System.out.println("El elemento "+X+ " fue encontrado\nEliminacion hecha..!!" 
-         +"\nRecorre la lista para verificar los datos"); 
-   } 
-    
-   public void EliminaDespuesX(int X) 
-   { 
-     Q=P; 
-     if(P.Enlace==null) 
-     { 
-       System.out.println("No hay nodo que le suceda a X"); 
-     } 
-     else 
-       T=P; Flag=true; 
-     while((Q.Informacion!=X)&&(Flag==true)) 
-     { 
-       if(Q.Enlace!=null) 
-       { 
-         R=T; 
-         T=Q; 
-         Q=Q.Enlace; 
-       } 
-       else 
-         Flag=false;         
-       } 
-        
-       if(Flag==false) 
-       { 
-         System.out.println("El elemento no fue encontrado"); 
-       } 
-       else 
-         System.out.println("El elemento "+X+ " fue encontrado\n"); 
-         System.out.println("Eliminacion Hecha..:!!"); 
-         System.out.println("\nRecorre la lista para verificar los datos"); 
-          
-         T=Q.Enlace; 
-         Q.Enlace=T.Enlace; 
-         T=null; 
-     } 
-      
-   public void Busqueda(int X) 
-   { 
-     Q=P; 
-     while((Q!=null)&&(Q.Informacion!=X)) 
-     { 
-       Q=Q.Enlace; 
-     } 
-     if(Q==null) 
-     { 
-       System.out.println("\nEl elemento no fue encontrado"); 
-     } 
-     else 
-       System.out.println("\nEl elemento "+X+" se encuentra en la lista"); 
-   } 
-    
-   public static void main(String args[]) 
-   { 
-     Lista obj=new Lista(); 
-     int Dato,opcion,Refer,X; 
-     String data,opc,ref,x; 
-     BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in)); 
-     try{ 
-     do 
-     { 
-       System.out.println("\n\n\t---****<MENU DE OPCIONES>****----\n\n"+ 
-       "1.-Insertar al inicio de la lista\n2.-Insertar al final de la lista\n"+ 
-       "3.-Insertar Antes de\n4.-Insertar Despues de"+ 
-       "\n5.-Recorrer la lista \n6.-Eliminar el primer nodo\n7.-Eliminar el ultimo nodo"+ 
-       "\n8.-Eliminar un determinado nodo \n9.-Eliminar un nodo antes de... \n10.-Elimina" 
-       +" un nodo despues de..." 
-       +"\n11.-Busqueda de un determinado nodo \n12.-<<Salir>> \n\nSelecciona una opcion:"); 
-       opc=teclado.readLine(); 
-       opcion=Integer.parseInt(opc); 
-      
-       switch(opcion) 
-       { 
-       case 1: try{System.out.println("\nIntroduce un valor para un dato nuevo(entero)"); 
-       data=teclado.readLine(); 
-       Dato=Integer.parseInt(data); 
-       obj.InsertarInicio(Dato);} 
-       catch(IOException variablerror) {System.out.println("error de captura ");}  
-        
-       break; 
-        
-       case 2: try{System.out.println("\nIntroduce un valor para un dato(entero)"); 
-       data=teclado.readLine(); 
-       Dato=Integer.parseInt(data); 
-       obj.InsertarFinal(Dato);} 
-       catch(IOException variablerror) {System.out.println("error de captura ");} 
-       break; 
-        
-       case 3:try{System.out.println("\nIntroduce un valor para un dato nuevo(entero)"); 
-       data=teclado.readLine(); 
-       Dato=Integer.parseInt(data); 
-       System.out.println("\nIntroduce un valor de la lista como referencia"); 
-       ref=teclado.readLine(); 
-       Refer=Integer.parseInt(ref); 
-       obj.InsertarAntes(Refer,Dato);} 
-       catch(IOException variablerror) {System.out.println("error de captura ");} 
-       break; 
-        
-       case 4:try{System.out.println("\nIntroduce un valor para un dato nuevo(entero)"); 
-       data=teclado.readLine(); 
-       Dato=Integer.parseInt(data); 
-       System.out.println("\nIntroduce un valor de la lista como referencia"); 
-       ref=teclado.readLine(); 
-       Refer=Integer.parseInt(ref); 
-       obj.InsertarDespues(Refer,Dato);} 
-       catch(IOException variablerror) {System.out.println("error de captura ");} 
-       break; 
-              
-       case 5: obj.Recorrer(); 
-       break; 
-        
-       case 6:obj.EliminaPrimero(); 
-       break; 
-        
-       case 7:obj.ElminaUltimo(); 
-       break; 
-        
-       case 8:try{System.out.println("Introduce el valor de un elemento de la lista"); 
-       x=teclado.readLine(); 
-       X=Integer.parseInt(x); 
-       obj.EliminaX(X);} 
-       catch(IOException variablerror) {System.out.println("error de captura ");} 
-       break; 
-        
-       case 9:try{System.out.println("Introduce el valor de un elemento de la lista"); 
-       x=teclado.readLine(); 
-       X=Integer.parseInt(x); 
-       obj.EliminaAntesX(X);} 
-       catch(IOException variablerror) {System.out.println("error de captura ");} 
-       break; 
-        
-       case 10:try{System.out.println("Introduce el valor de un elemento de la lista"); 
-       x=teclado.readLine(); 
-       X=Integer.parseInt(x); 
-       obj.EliminaDespuesX(X);} 
-       catch(IOException variablerror) {System.out.println("error de captura ");} 
-       break; 
-        
-       case 11:try{System.out.println("Introduce el valor de un elemento de la lista"); 
-       x=teclado.readLine(); 
-       X=Integer.parseInt(x); 
-       obj.Busqueda(X);} 
-       catch(IOException variablerror) {System.out.println("error de captura ");} 
-       break; 
-        
-       case 12:  
-            System.out.println("\nHaz elegido la opcion de salida\n\nGracias Por utilizar Dra@ckzer software"); 
-       System.exit(0); 
-       break;  
-       }  
-   } 
-   while(opcion!=12); 
-   } 
-     catch(IOException variablerror) {System.out.println("error de captura ");} 
-   } 
-   } 
-   
-