Lista.java

   1 /**
   2  * Lista.java
   3  * @author Luis Alejandro Bernal Romero.
   4  * El TDA Lista recursiva.
   5  */
   6 
   7 public class Lista {
   8         private Object info;
   9         private Lista cola;
  10 
  11         /**
  12          * Constructor para una lista de un solo elemento.
  13          * @param i La información.
  14          */
  15         public Lista(Object i){
  16                 info = i;
  17                 cola = null;
  18         }
  19         
  20         /**
  21          * Constructor para una lista de más de un elemento.
  22          * @param i La información
  23          * @param c La lista cola
  24          */
  25         public Lista(Object i, Lista c){
  26                 info = i;
  27                 cola = c;
  28         }
  29         
  30         /**
  31          * Obtiene la cola de la lista.
  32          * @return Cola de la lista.
  33          */
  34         public Lista obtCola(){
  35                 return cola;
  36         }
  37         
  38         /**
  39          * Obtiene la información de la lista.
  40          * @return La información.
  41          */
  42         public Object obtInfo(){
  43                 return info;
  44         }
  45         
  46         /**
  47          * Obtiene la información del "n"-esimo nodo.
  48          * @param n La posición del nodo.
  49          * @return La información del nodo.
  50          */
  51         public Object obtInfo(int n){
  52                 if(n == 0){
  53                         return info;
  54                 }
  55                 if(cola != null){
  56                         return cola.obtInfo(n - 1);
  57                 }
  58                 return null;
  59         }
  60         
  61         /**
  62          * Busca la información "i" en la lista retornando la sublista cuya cabeza contiene 
  63          * la información. Si no la encuentra retorna null.
  64          * @param i La información a buscar.
  65          * @return La sublista cuya cabeza tiene la información, retorna null sino la 
  66          * encuentra.
  67          */
  68         public Lista buscar(Object i){
  69                 if(info.equals(i)){
  70                         return this;
  71                 }
  72                 if(cola != null){
  73                         return cola.buscar(i);
  74                 }
  75                 return null;
  76         }
  77         
  78         /**
  79          * Cuenta en numero de nodos de la lista.
  80          * @return El numero de nodos de la lista.
  81          */
  82         public int contar(){
  83                 if(cola == null){
  84                         return 1;
  85                 }
  86                 return 1 + cola.contar();
  87         }
  88         
  89         /**
  90          * Convierte a cadena la lista. Por ejemplo, para imprimirla.
  91          */
  92         public String toString(){
  93                 String cad = "(";
  94                 cad += info;
  95                 if(cola != null){
  96                         cad += "," + cola;
  97                 }
  98                 cad += ")";
  99                 return cad;
 100         }
 101 
 102         /**
 103          * Adiciona la Lista "l" al final de la lista. 
 104          * @param l Lista que se va a adicionar.
 105          */
 106         public void adicionar(Lista l){
 107                 if(cola == null){
 108                         cola = l;
 109                 }
 110                 else{
 111                         cola.adicionar(l);
 112                 }
 113         }
 114         
 115         /**
 116          * Inserta la Lista "l" después de la cabeza.
 117          * @param l La Lista a insertar.
 118          */
 119         public void insertar(Lista l){
 120                 if(cola == null){
 121                         cola = l;
 122                 }
 123                 else{
 124                         l.adicionar(cola);
 125                         cola = l;
 126                 }
 127         }
 128         
 129         /**
 130          * Inserta la lista "l" después de la posición "n". Si no existe la posición la 
 131          * inserta al final.
 132          * @param n Posición a insertar.
 133          * @param l La Lista que se va a insertar.
 134          */
 135         public void insertar(int n, Lista l){
 136                 if(n == 1){
 137                         insertar(l);
 138                 }
 139                 else{
 140                         if(cola != null){
 141                                 cola.insertar(n - 1, l);
 142                         }
 143                         else {
 144                                 cola = l;
 145                         }
 146                 }
 147         }
 148         
 149         /**
 150          * Elimina el nodo después de la cabeza retornándolo. 
 151          * @return El nodo final.
 152          */
 153         public Lista eliminar(){
 154                 Lista c = cola;
 155                 if(cola != null){
 156                         cola = cola.cola;
 157                         c.cola = null;
 158                 }
 159                 return c;
 160         }
 161         
 162         /**
 163          * Elimina el "n"-esimo nodo de la Lista retornándolo.
 164          * @param n La posición del nodo.
 165          * @return El nodo que se elimina.
 166          */
 167         public Lista eliminar(int n){
 168                 if(n == 2){
 169                         return eliminar();
 170                 }
 171                 if(cola != null){
 172                         return cola.eliminar(n - 1);
 173                 }
 174                 return null;
 175         }
 176         
 177         /**
 178          * Elimina la cabeza de la sublista "l" retornándola.
 179          * @param l La sublista cuya cabeza se eliminará.
 180          * @return La cabeza.
 181          */
 182         public Lista eliminar(Lista l){
 183                 if(cola == null){
 184                         return null;
 185                 }
 186                 if(cola.equals(l)){
 187                         return eliminar();
 188                 }
 189                 return cola.eliminar(l);
 190         }
 191         
 192         /**
 193          * Saca una copia de la sublista de la cola.
 194          * @return La sublista.
 195          */
 196         public Lista subLista(){
 197                 if(cola != null){
 198                         return new Lista(cola.info, cola.subLista());
 199                 }
 200                 return null;
 201         }
 202         
 203         /**
 204          * Hace una copia de la sublista que va desde la posición  "n" hasta la "m".
 205          * @param n Posición inicial
 206          * @param m Posición final
 207          * @return La sublista
 208          */
 209         public Lista subLista(int n, int m){
 210                 return subLista(n, m, 1);
 211         }
 212         
 213         private Lista subLista(int n, int m, int i){
 214                 if(i >= n && i < m){
 215                         if(cola != null){
 216                                 return new Lista(info, cola.subLista(n, m, i + 1));
 217                         }
 218                         return new Lista(info);
 219                 }
 220                 if(cola != null){
 221                         return cola.subLista(n, m, i + 1);
 222                 }
 223                 return null;
 224         }
 225 } // class Lista

CategoryJava | CategoryProgramacion

Java/Programas/ListaRecursiva/Lista.java (last edited 2008-04-20 14:40:23 by localhost)