You are on page 1of 4

import javax.swing.

*;
import java.io.IOException;
public class Lista {
private Nodo inicial;
public Lista() {
this.inicial = null;
}
public void desplegarLista() {
if (inicial == null) {
JOptionPane.showMessageDialog(null, "La lista esta vacia
");
} else {
String x = "LA LISTA ENLAZADA ES:\n\n";
Nodo apunt;
apunt = inicial;
while (apunt != null) {
x = x + "\n" + apunt.dato;
apunt = apunt.sig;
}
JOptionPane.showMessageDialog(null, x);
}
}
private Nodo buscarLista(int clave) {
/* Devuelve la direccion del nodo anterior al nuevo
nodo que va a ser agregado, o que va a ser eliminado.
Si la clave es menor o igual al dato del primer nodo
el valor devuelto es NULL.
Si la clave es mayor que el dato del último nodo
devuelve la dirección del último nodo.
*/
Nodo anterior;
anterior = null;
if (clave <= inicial.dato)
return anterior;
else {
anterior = inicial;
while ((anterior.sig != null) && (clave > anterior.sig.d
ato))
anterior = anterior.sig;
return anterior;
}
}
private void eliminarNodo(int clave) {
boolean elimino = false;
@SuppressWarnings("unused")
Nodo temp, anterior;
if (inicial.dato == clave) {
temp = inicial;
inicial = inicial.sig;
elimino = true;
} else {
anterior = buscarLista(clave);
if (anterior != null && anterior.sig != null)
if (anterior.sig.dato == clave) {
anterior.sig = anterior.sig.sig;
elimino = true;
}
}
if (elimino == false)
JOptionPane.showMessageDialog(null, "El nodo a eliminar
no existe");
else
JOptionPane.showMessageDialog(null, "Nodo eliminado con éx
ito");
}
public void eliminarLista() {
Nodo apun=inicial;
while(apun != null)
{
inicial = apun.sig;
apun = inicial;
}
JOptionPane.showMessageDialog(null, "Lista eliminada con éxito");
}
public void eliminar() {
int clave;
String resp;
do {
clave = Integer.parseInt(JOptionPane
.showInputDialog("Entre clave del nodo a
eliminar"));
eliminarNodo(clave);
resp = JOptionPane
.showInputDialog("Desea eliminar otro no
do? (s/n)");
resp = resp.toLowerCase();
} while ("s".equals(resp));
}
public void agregar() {
Nodo nuevo, anterior;
String resp;
do {
nuevo = new Nodo();
nuevo.dato = Integer.parseInt(JOptionPane
.showInputDialog("Entre clave del nodo a
agregar"));
if (inicial == null) {
// Agrega el primer nodo a la lista
inicial = nuevo;
nuevo.sig = null;
} else {
// Agrega una lista que contiene al menos un nod
o
anterior = buscarLista(nuevo.dato);
if (anterior == null) {
// Agrega un nodo que queda de primero
// en una lista que no estaba vacía
if (inicial.dato != nuevo.dato) {
nuevo.sig = inicial;
inicial = nuevo;
} else
JOptionPane.showMessageDialog(nu
ll,
"El nodo a agreg
ar ya existe");
} else {
if (anterior.sig != null) {
// Agrega un nodo que queda entr
e el
// primero y el último
if (anterior.sig.dato != nuevo.d
ato) {
nuevo.sig = anterior.sig
;
anterior.sig = nuevo;
} else
JOptionPane.showMessageD
ialog(null,
"El nodo
a agregar ya existe");
} else {
// Agrega un nodo que queda de últ
imo
nuevo.sig = null;
anterior.sig = nuevo;
}
}
}
resp = JOptionPane
.showInputDialog("Desea agregar otro nod
o? (s/n)");
resp = resp.toLowerCase();
} while ("s".equals(resp));
}
public static void main(String[] args) throws IOException
{
Lista l = new Lista();
int resp;
String menu;
do{
menu = " LISTA ENLAZADA \n";
menu = menu +("---------------------------------
----\n ");
menu = menu +("---------------------------- \n")
;
menu = menu +(" 1. Leer Nodos. \n");
menu = menu +(" 2. Desplegar Lista. \n");
menu = menu +(" 3. Eliminar Nodos. \n");
menu = menu +(" 4. Eliminar Lista. \n");
menu = menu +(" 0. salir. \n");
menu = menu +("----------------------------\n");
resp = Integer.parseInt(JOptionPane.showInputDia
log(menu));
switch(resp) {
case 1:
l.agregar();
break;
case 2:
l.desplegarLista();
break;
case 3:
l.eliminar();
break;
case 4:
l.eliminarLista();
}
}while(resp!=0);
JOptionPane.showMessageDialog(null, "Fin del programa");
}
}