Advertisement
Guest User

Lista enlazada simple

a guest
Oct 20th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.39 KB | None | 0 0
  1. public class List<E> {
  2.     /**
  3.      * Campos en la estructura interna o privada de la clase
  4.      */
  5.     private Node head;
  6.     private int count;
  7.     private Node tail;
  8.    
  9.     /**
  10.      * Getter para count
  11.      *
  12.      * @return cantidad de elementos en la linea
  13.      */
  14.     public int getCount() {
  15.         return this.count;
  16.     }
  17.    
  18.     /**
  19.      * Constructor por defecto
  20.      */
  21.     public List() {
  22.         this.head = null;
  23.         this.count = 0;
  24.         this.tail = null;
  25.     }
  26.    
  27.     /**
  28.      * Agrega al principio
  29.      * Este codigo puede y debe mejorarse
  30.      *
  31.      * @param item elemento que se agrega a la lista
  32.      */
  33.    
  34.     public void AddFirst(E item) {
  35.         // si esta vacia
  36.         if (this.count == 0) {
  37.             // se crea un nodo con el elemento a agregar
  38.             // el nuevo nodo es el primero y el ultimo
  39.             this.head = this.tail = new Node(item, null);
  40.             // incrementa la cuenta de elemento
  41.             ++this.count;
  42.         }
  43.         else {
  44.             // se crea un nodo cone el elemento a agregar
  45.             Node temp = new Node(item, null);
  46.             // el siguiente del nuevo nodo es el actual primero
  47.             temp.next = this.head;
  48.             // el nuevo nodo se convierte en el primero
  49.             this.head = temp;
  50.             // incrementa la cuenta de elementos
  51.             ++this.count;
  52.         }
  53.     }
  54.    
  55.     public void Better_AddFirst(E item) {
  56.         Node temp = new Node(item, this.head);
  57.         if (this.count == 0) {
  58.             this.tail = temp;
  59.         }
  60.         this.head = temp;
  61.         ++this.count;
  62.     }
  63.    
  64.     /**
  65.      *Extrae y devuelve el primer elemento de la lista
  66.      *
  67.      * @return el elemento que se encuentra al principio de la lista
  68.      * @exception Lista vacia
  69.      */
  70.    
  71.     public E RemoveFirst() {
  72.         if (this.count == 0) {
  73.             throw new RuntimeException("La lista esta vaciá...");
  74.         }
  75.        
  76.         // toma el elemento que esta en el primer nodo
  77.         E item = this.head.item;
  78.         // avanza el primer nodo al siguiente
  79.         this.head = this.head.next;
  80.         // si no hay mas nodos
  81.         if (this.head == null) {
  82.             // vaciar la lista
  83.             this.tail = null;
  84.         }
  85.         // decrementa la cuenta de elementos
  86.         --this.count;
  87.         // regresar el elemento
  88.         return item;
  89.     }
  90.    
  91.     /**
  92.      *Extrae y devuelve el ultimo elemento de la lista
  93.      *
  94.      * @return el elemento que se encuentra al final de la lista
  95.      * @exception Lista vacia
  96.      */
  97.    
  98.    
  99.     public E RemoveLast() {
  100.         if (this.count == 0) {
  101.             throw new RuntimeException("La lista esta vaciá...");
  102.         }
  103.        
  104.         E item = this.tail.item;
  105.        
  106.         // si es el unico nodo
  107.         if (this.head.next == null) {
  108.             // vacia la lista
  109.             this.head = this.tail = null;
  110.         }
  111.         else {
  112.             // estas implementacion tiene Orden lineal O(n)
  113.             // comienza con el primer nodo
  114.             Node skip = this.head;
  115.             // recorre la lista mientras haya dos nodos máa
  116.             for ( ; skip.next.next != null; skip = skip.next) {}
  117.             // skip es el penúltimo nodo que ahora será el último
  118.             this.tail = skip;
  119.             // anula la referencia al siguiente nodo
  120.             this.tail.next =null;
  121.         }
  122.         // decrementa la cuenta de elementos
  123.         --this.count;
  124.         // regresa el elemento
  125.         return item;
  126.     }
  127.    
  128.     /**
  129.      *  Muestra en la salida estándar todo los elementos de la lista
  130.      *  
  131.      *  Para evitar código como este, se aconseja implementar interfaces
  132.      *  que permitan recorrer la lista, como ser Iterable e Iterator
  133.      *  
  134.      */
  135.    
  136.     public void Mostrar() {
  137.         for (Node skip = this.head; skip != null; skip = skip.next) {
  138.             System.out.printf("%s ", skip.toString());
  139.         }
  140.     }
  141.    
  142.     /**
  143.      * Agrega al final
  144.      * Este codigo puede y debe mejorarse
  145.      *
  146.      * @param item elemento que se agrega a la lista
  147.      */
  148.    
  149.     public void AddLast(E item) {
  150.         if (this.count == 0) {
  151.             this.head = this.tail = new Node(item, null);
  152.             ++this.count;
  153.         }
  154.         else {
  155.             Node temp = new Node(item, null);
  156.             this.tail.next = temp;
  157.             this.tail = temp;
  158.             ++this.count;
  159.         }
  160.     }
  161.    
  162.     public void Better_AddLast(E item) {
  163.         Node temp = new Node(item, null);
  164.         if (this.count == 0) {
  165.             this.head = temp;
  166.         }
  167.         else {
  168.             this.tail.next = temp;
  169.         }
  170.         this.tail = temp;
  171.         ++this.count;
  172.     }
  173.    
  174.    
  175.    
  176.     private class Node {
  177.    
  178.     /**
  179.      * Campos en la estructura interna o privada de la clase
  180.      */
  181.     public E item;
  182.     public Node next;
  183.    
  184.     //Constructor por defecto
  185.     public Node() {
  186.         this(null, null);
  187.     }
  188.    
  189.     //Constructor especializado
  190.     public Node(E item) {
  191.         this(item, null);
  192.     }
  193.    
  194.  
  195.     //Constructor especializado
  196.     public Node(E item, Node next) {
  197.         this.item = item;
  198.         this.next = next;
  199.     }
  200.    
  201.     //Devuelve una cadena de texto que representa el contenido
  202.     public String toString() {
  203.         return this.item.toString();
  204.     }
  205.     }
  206.    
  207.    
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement