jtentor

LinkedList 2da parte - DoubleLinkedOrderedList.java

Oct 23rd, 2021
595
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //
  2. // Created by Julio Tentor <jtentor@fi.unju.edu.ar>
  3. //
  4.  
  5. public class DoubleLinkedOrderedList<ELEMENT extends Comparable<ELEMENT>>
  6.         extends DoubleLinkedList<ELEMENT> implements ILinkedOrderedList<ELEMENT> {
  7.  
  8.  
  9.     //region Constructors
  10.  
  11.     public DoubleLinkedOrderedList() {
  12.         super();
  13.     }
  14.     //endregion
  15.  
  16.     //region Ordered List Methods
  17.  
  18.     public void addInOrder(ELEMENT item) {
  19.         if (this.size() == 0) {
  20.             this.head = this.tail = new Node<ELEMENT>(item, null, null);
  21.             ++this.count;
  22.         }
  23.         else {
  24.             if (item.compareTo(this.head.item) <= 0) {
  25.                 this.addFirst(item);
  26.             }
  27.             else {
  28.                 if (item.compareTo(this.tail.item) > 0) {
  29.                     this.addLast(item);
  30.                 }
  31.                 else {
  32.                     Node<ELEMENT> skip = this.head;
  33.                     while ((skip != null) && (item.compareTo(skip.item) > 0)) {
  34.                         skip = skip.next;
  35.                     }
  36.                     if (skip == null) {
  37.                         throw new RuntimeException("Algo está mal en el orden de los elementos de la lista...");
  38.                     }
  39.                     else {
  40.                         Node<ELEMENT> temp = new Node<ELEMENT>(item, skip, skip.prev);
  41.                         skip.prev.next = temp;
  42.                         skip.prev = temp;
  43.                         ++this.count;
  44.                     }
  45.                 }
  46.             }
  47.         }
  48.  
  49.     }
  50.  
  51.     public boolean findAndRemove(ELEMENT item) {
  52.         if (this.size() == 0) {
  53.             return false;
  54.         }
  55.  
  56.         Node<ELEMENT> skip = this.head;
  57.         while ((skip != null) && !(item.compareTo(skip.item) == 0)) {
  58.             skip = skip.next;
  59.         }
  60.         if (skip == null) {
  61.             return false;
  62.         }
  63.         else {
  64.             if (skip.prev == null) {
  65.                 this.removeFirst();
  66.                 return true;
  67.             }
  68.             else {
  69.                 if (skip.next == null) {
  70.                     this.removeLast();
  71.                     return true;
  72.                 }
  73.                 else {
  74.                     skip.prev.next = skip.next;
  75.                     skip.next.prev = skip.prev;
  76.                     skip.prev = skip.next = null;
  77.                     return true;
  78.                 }
  79.             }
  80.         }
  81.     }
  82.  
  83.     //endregion
  84.  
  85. }
  86.  
RAW Paste Data