158 lines
3.9 KiB
Java
158 lines
3.9 KiB
Java
package cl.cromer.estructuras;
|
|
|
|
public class ListaEnlazada {
|
|
private Enlace lista;
|
|
|
|
private int size;
|
|
|
|
private int tipo;
|
|
|
|
public ListaEnlazada() {
|
|
lista = null;
|
|
}
|
|
|
|
public int size() {
|
|
return size;
|
|
}
|
|
|
|
public int getTipo() {
|
|
return tipo;
|
|
}
|
|
|
|
public void setTipo(int tipo) {
|
|
this.tipo = tipo;
|
|
}
|
|
|
|
public Enlace buscar(int llave) {
|
|
if (this.lista != null) {
|
|
// La lista no es vacia
|
|
Enlace lista = this.lista;
|
|
while (lista.getLlave() != llave) {
|
|
// Buscar hasta la llave es encontraddo
|
|
if (lista.getSiguente() != null) {
|
|
// Buscar en la sigenute enlace
|
|
lista = lista.getSiguente();
|
|
}
|
|
else {
|
|
// No se encuentra
|
|
return null;
|
|
}
|
|
}
|
|
// Se encontró
|
|
return lista;
|
|
}
|
|
else {
|
|
// La lista es vacia, nada para buscar
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public boolean insertar(int llave, int valor) {
|
|
if (buscar(llave) == null) {
|
|
// Crear una enlace y agregarla a la lista
|
|
Enlace nueva = new Enlace();
|
|
nueva.setLlave(llave);
|
|
nueva.setValor(valor);
|
|
nueva.setSiguente(lista);
|
|
lista = nueva;
|
|
size++;
|
|
return true;
|
|
}
|
|
else {
|
|
// Se falló porque la llave ya existe
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public boolean eliminar(int llave) {
|
|
if (lista != null) {
|
|
// La lista no es vacia
|
|
Enlace lista = this.lista;
|
|
Enlace previo = lista;
|
|
while (lista.getLlave() != llave) {
|
|
// Buscar hasta la llave es encontraddo
|
|
if (lista.getSiguente() != null) {
|
|
// Buscar en la sigenute enlace
|
|
previo = lista;
|
|
lista = lista.getSiguente();
|
|
}
|
|
else {
|
|
// No se encuentra
|
|
return false;
|
|
}
|
|
}
|
|
// Se encontró
|
|
if (lista == this.lista) {
|
|
// Si es la primera enlace, cambiarla al siguente enlace
|
|
this.lista = this.lista.getSiguente();
|
|
}
|
|
else {
|
|
// Sino cortar esta enlace de la lista
|
|
previo.setSiguente(lista.getSiguente());
|
|
}
|
|
size--;
|
|
return true;
|
|
}
|
|
else {
|
|
// La lista es vacia, no hay nada para eliminar
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Devolver un enlace con su llave y valor.
|
|
* @param indice int: El indice que desea ver.
|
|
* @return Enlace: El enlace a devolver.
|
|
*/
|
|
public Enlace getIndice(int indice) {
|
|
if (lista != null && indice >= 0 && indice < size()) {
|
|
int i = size();
|
|
Enlace lista = this.lista;
|
|
while (i > indice + 1) {
|
|
lista = lista.getSiguente();
|
|
i--;
|
|
}
|
|
return lista;
|
|
}
|
|
else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// Estructura de enlaces
|
|
public class Enlace {
|
|
private int llave;
|
|
private int valor;
|
|
private Enlace siguente;
|
|
|
|
protected Enlace() {
|
|
siguente = null;
|
|
}
|
|
|
|
protected int getLlave() {
|
|
return llave;
|
|
}
|
|
|
|
protected void setLlave(int llave) {
|
|
this.llave = llave;
|
|
}
|
|
|
|
protected int getValor() {
|
|
return valor;
|
|
}
|
|
|
|
protected void setValor(int valor) {
|
|
this.valor = valor;
|
|
}
|
|
|
|
protected Enlace getSiguente() {
|
|
return siguente;
|
|
}
|
|
|
|
protected void setSiguente(Enlace siguente) {
|
|
this.siguente = siguente;
|
|
}
|
|
}
|
|
}
|
|
|