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 ");}
}
}