lunes, 22 de marzo de 2010

CODIGO-LISTAS


public class Lista {
private Object info;
private Lista cola;

/**
* Constructor para una lista de un solo elemento.
* @param i La información.
*/

public Lista(Object i){
info = i;
cola = null;
}

/**
* Constructor para una lista de más de un elemento.
* @param i La información
* @param c La lista cola
*/
public Lista(Object i, Lista c){
info = i;
cola = c;
}

/**
* Obtiene la cola de la lista.
* @return Cola de la lista.
*/
public Lista obtCola(){
return cola;
}
/**
* Obtiene la información de la lista.
* @return La información.
*/

public Object obtInfo(){
return info;
}

/**
* Obtiene la información del "n"-esimo nodo.
* @param n La posición del nodo.
* @return La información del nodo.
*/
public Object obtInfo(int n){
if(n == 0){
return info;
}
if(cola != null){
return cola.obtInfo(n - 1);
}
return null;
}
/**
* Busca la información "i" en la lista retornando la sublista cuya cabeza contiene
* la información. Si no la encuentra retorna null.
* @param i La información a buscar.
* @return La sublista cuya cabeza tiene la información, retorna null sino la
* encuentra.
*/
public Lista buscar(Object i){
if(info.equals(i)){
return this;
}
if(cola != null){
return cola.buscar(i);
}
return null;
}
/**
* Cuenta en numero de nodos de la lista.
* @return El numero de nodos de la lista.
*/
public int contar(){
if(cola == null){
return 1;
}
return 1 + cola.contar();
}
/**
* Convierte a cadena la lista. Por ejemplo, para imprimirla.
*/
public String toString(){
String cad = "(";
cad += info;
if(cola != null){
cad += "," + cola;
}
cad += ")";
return cad;
}
/**
* Adiciona la Lista "l" al final de la lista.
* @param l Lista que se va a adicionar.
*/
public void adicionar(Lista l){
if(cola == null){
cola = l;
}
else{
cola.adicionar(l);
}
}
/**
* Inserta la Lista "l" después de la cabeza.
* @param l La Lista a insertar.
*/
public void insertar(Lista l){
if(cola == null){
cola = l;
}
else{
l.adicionar(cola);
cola = l;
}
}
/**
* Inserta la lista "l" después de la posición "n". Si no existe la posición la
* inserta al final.
* @param n Posición a insertar.
* @param l La Lista que se va a insertar.
*/
public void insertar(int n, Lista l){
if(n == 1){
insertar(l);
}
else{
if(cola != null){
cola.insertar(n - 1, l);
}
else {
cola = l;
}
}
}
/**
* Elimina el nodo después de la cabeza retornándolo.
* @return El nodo final.
*/
public Lista eliminar(){
Lista c = cola;
if(cola != null){
cola = cola.cola;
c.cola = null;
}
return c;
}
/**
* Elimina el "n"-esimo nodo de la Lista retornándolo.
* @param n La posición del nodo.
* @return El nodo que se elimina.
*/
public Lista eliminar(int n){
if(n == 2){
return eliminar();
}
if(cola != null){
return cola.eliminar(n - 1);
}
return null;
}
/**
* Elimina la cabeza de la sublista "l" retornándola.
* @param l La sublista cuya cabeza se eliminará.
* @return La cabeza.
*/
public Lista eliminar(Lista l){
if(cola == null){
return null;
}
if(cola.equals(l)){
return eliminar();
}
return cola.eliminar(l);
}
/**
* Saca una copia de la sublista de la cola.
* @return La sublista.
*/
public Lista subLista(){
if(cola != null){
return new Lista(cola.info, cola.subLista());
}
return null;
}
/**
* Hace una copia de la sublista que va desde la posición  "n" hasta la "m".
* @param n Posición inicial
* @param m Posición final
* @return La sublista
*/
public Lista subLista(int n, int m){
return subLista(n, m, 1);
}
private Lista subLista(int n, int m, int i){
if(i >= n && i < m){
if(cola != null){
return new Lista(info, cola.subLista(n, m, i + 1));
}
return new Lista(info);
}
if(cola != null){
return cola.subLista(n, m, i + 1);
}
return null;
}
} // class Lista

No hay comentarios: