public class EjecutarLista {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Lista lista = new Lista();
lista.insertarFinal("ASignatura de Estruturas de Datos");
lista.insertarFinal(13);
lista.insertarFinal(true);
System.out.println(lista);
// si quisieramos obtener el primer elemento de la lista
//String x = lista.obtener(0);
// Arreglo para obtener el primer elemento
//String x = (String)lista.obtener(0);
int x = (int)lista.obtener(1);
System.out.println(x);
}
public class Lista {
private Object dato;
private Lista sig;
// Constructores
public Lista() { // Crear una lista vacia
dato = null;
sig = null;
}
public Lista(Object d) { // crea una lista con un solo dato
dato = d;
sig = new Lista();
}
public Lista(Lista otra) { // crea una lista a partir de otra
dato = otra.dato;
sig = otra.sig;
}
public boolean vacia() {
return sig == null && dato == null;
}
public void insertarInicio(Object x) {
sig = new Lista(this);
dato = x;
}
public void insertar(Object x, int k) { // insertar un dato en la k-esima
// posicion de la lista
if (vacia() || k == 0)
insertarInicio(x);
else
sig.insertar(x, k - 1);
}
public void insertarFinal(Object x) {
if (vacia()) {
dato = x;
sig = new Lista();
} else {
sig.insertarFinal(x);
}
}
public Object eliminar(Object x) {
Object res = null;
if (!vacia()) {
if (dato.equals(x)) {
res = dato;
dato = sig.dato;
sig = sig.sig;
} else {
res = sig.eliminar(x);
}
}
return res;
}
public int tamano() {
if (vacia())
return 0;
return 1 + sig.tamano();
}
public boolean buscar(Object x) {
if (vacia())
return false;
if (dato.equals(x))
return true;
return sig.buscar(x);
}
public Object obtener(int pos) {
if (vacia())
return null;
if (pos == 0)
return dato;
return sig.obtener(pos - 1);
}
public String toString() {
String res = "[" + resto() + "]";
return res;
}
private String resto() {
String res = "";
if (!vacia()) {
res = dato.toString();
if (!sig.vacia())
res = res + ", " + sig.resto();
}
return res;
}
public Object eliminar(int pos) {
if (vacia())
return null;
if (pos == 0) {
Object res = dato;
dato = sig.dato;
sig = sig.sig;
return res;
} else {
return sig.eliminar(pos - 1);
}
}
public void modificar(int pos, Object x) {
if (vacia() || pos < 0)
return;
if (pos == 0) {
dato = x;
} else {
sig.modificar(pos - 1, x);
}
}
}