Advertisement
RafaelFascio

Tp4_list

Jun 16th, 2021
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.83 KB | None | 0 0
  1. import java.util.Iterator;
  2.  
  3. public class SimpleLinkedList<ELEMENT> implements ILinkedList<ELEMENT> {
  4.  
  5.     //region Node Class
  6.  
  7.     private class Node<ELEMENT> {
  8.         public ELEMENT item;
  9.         public Node<ELEMENT> next;
  10.  
  11.         public Node() {
  12.             this(null, null);
  13.         }
  14.         public Node(ELEMENT item) {
  15.             this(item, null);
  16.         }
  17.         public Node(ELEMENT item, Node<ELEMENT> next) {
  18.             this.item = item;
  19.             this.next = next;
  20.         }
  21.  
  22.         @Override
  23.         public String toString() {
  24.             return this.item.toString();
  25.         }
  26.     }
  27.     //endregion
  28.  
  29.     //region Attributes
  30.  
  31.     protected Node<ELEMENT> head;
  32.     protected int count;
  33.     protected Node<ELEMENT> tail;
  34.     //endregion
  35.  
  36.     //region Constructors
  37.  
  38.     public SimpleLinkedList() {
  39.         this.head = null;
  40.         this.count = 0;
  41.         this.tail = null;
  42.     }
  43.     //endregion
  44.  
  45.     //region Linked List Methods
  46.  
  47.     // Returns the number of elements in this list.
  48.     public int size() {
  49.         return this.count;
  50.     }
  51.  
  52.     public void addFirstRookieVersion(ELEMENT item) {
  53.         if (this.count == 0) {
  54.             this.head = this.tail = new Node<ELEMENT>(item, null);
  55.             ++this.count;
  56.         } else {
  57.             Node<ELEMENT> temp = new Node<ELEMENT>(item, null);
  58.             temp.next = this.head;
  59.             this.head = temp;
  60.             ++this.count;
  61.         }
  62.     }
  63.     // Inserts the specified element at the beginning of this list.
  64.     public void addFirst(ELEMENT item) {
  65.         Node<ELEMENT> temp = new Node<ELEMENT>(item, this.head);
  66.         if (this.count == 0) {
  67.             this.tail = temp;
  68.         }
  69.         this.head = temp;
  70.         ++this.count;
  71.     }
  72.  
  73.     public void addLastRookieVersion(ELEMENT item) {
  74.         if (this.count == 0) {
  75.             this.head = this.tail = new Node<ELEMENT>(item, null);
  76.             ++this.count;
  77.         } else {
  78.             Node<ELEMENT> temp = new Node<ELEMENT>(item, null);
  79.             this.tail.next = temp;
  80.             this.tail = temp;
  81.             ++this.count;
  82.         }
  83.     }
  84.     // Appends the specified element to the end of this list.
  85.     public void addLast(ELEMENT item) {
  86.         Node<ELEMENT> temp = new Node<ELEMENT>(item, null);
  87.         if (this.count == 0) {
  88.             this.head = temp;
  89.         } else {
  90.             this.tail.next = temp;
  91.         }
  92.         this.tail = temp;
  93.         ++this.count;
  94.     }
  95.  
  96.     // Removes and returns the first element from this list.
  97.     public ELEMENT removeFirst() {
  98.         if (this.count == 0) {
  99.             throw new RuntimeException("La lista está vacía...");
  100.         }
  101.         ELEMENT item = this.head.item;
  102.         this.head = this.head.next;
  103.         if (this.head == null) {
  104.             this.tail = null;
  105.         }
  106.         --this.count;
  107.         return item;
  108.     }
  109.  
  110.     // Removes and returns the last element from this list.
  111.     public ELEMENT removeLast() {
  112.         if (this.count == 0) {
  113.             throw new RuntimeException("La lista está vacía...");
  114.         }
  115.         ELEMENT item = this.tail.item;
  116.         if (this.head.next == null) {
  117.             this.head = this.tail = null;
  118.         } else {
  119.             Node<ELEMENT> skip = this.head;
  120.             while (skip.next.next != null) {
  121.                 skip = skip.next;
  122.             }
  123.             this.tail = skip;
  124.             this.tail.next = null;
  125.         }
  126.         --this.count;
  127.         return item;
  128.     }
  129.     //endregion
  130.  
  131.     //region Object Methods
  132.  
  133.     @Override
  134.     public String toString() {
  135.  
  136.         if (this.size() <=0) {
  137.             return "";
  138.         }
  139.  
  140.        
  141.         StringBuilder sb = new StringBuilder();
  142.  
  143.         sb.append("[" + this.head.item.toString());
  144.         for (Node<ELEMENT> skip = this.head.next; skip != null; skip = skip.next) {
  145.             sb.append(", " + skip.item.toString());
  146.         }
  147.         sb.append("]");
  148.  
  149.         return sb.toString();
  150.     }
  151.     //endregion
  152.  
  153.  
  154.     //region Iterable Methods
  155.     @Override
  156.     public Iterator<ELEMENT> iterator() {
  157.         return new SimpleLinkedListIterator(this.head);
  158.     }
  159.  
  160.     private class SimpleLinkedListIterator implements Iterator<ELEMENT> {
  161.         private Node<ELEMENT> current;
  162.  
  163.         public SimpleLinkedListIterator(Node<ELEMENT> current) {
  164.             this.current = current;
  165.         }
  166.  
  167.         @Override
  168.         public boolean hasNext() {
  169.             return this.current != null;
  170.         }
  171.  
  172.         @Override
  173.         public ELEMENT next() {
  174.             if (!this.hasNext()) {
  175.                 throw new RuntimeException("La lista está vacía...");
  176.             }
  177.             ELEMENT item = this.current.item;
  178.             this.current = this.current.next;
  179.             return item;
  180.         }
  181.  
  182.     }
  183.  
  184.  
  185.     //endregion
  186.  
  187. }
  188.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement