Advertisement
RAUL-SUAREZ

tp4-punto3

Nov 1st, 2021
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.util.Iterator;
  2.  
  3. public class SimpleLinkedList<ELEMENT extends Comparable<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. public void Mostrar() {
  132. for (Node skip = this.head; skip!= null; skip = skip.next) {
  133. System.out.printf("%s ", skip.toString() );
  134. }
  135. }
  136.  
  137. public void addInOrder(ELEMENT item) {
  138. if (this.size() == 0) {
  139. this.head = this.tail = new Node<ELEMENT>(item, null);
  140. ++this.count;
  141. }
  142. else {
  143. if (item.compareTo(this.head.item) <= 0) {
  144. this.addFirst(item);
  145. }
  146. else {
  147. if (item.compareTo(this.tail.item) > 0) {
  148. this.addLast(item);
  149. }
  150. else {
  151. Node<ELEMENT> skip = this.head;
  152. while ((skip != null) && (skip.next != null) && (item.compareTo(skip.next.item) > 0)) {
  153. skip = skip.next;
  154. }
  155. if (skip == null) {
  156. throw new RuntimeException("Algo está mal en el orden de los elementos de la lista...");
  157. }
  158. else {
  159. Node<ELEMENT> temp = new Node<ELEMENT>(item, skip.next);
  160. skip.next = temp;
  161. ++this.count;
  162. }
  163. }
  164. }
  165. }
  166.  
  167. }
  168.  
  169.  
  170.  
  171.  
  172. //region Object Methods
  173.  
  174. @Override
  175. public String toString() {
  176.  
  177. if (this.size() <=0) {
  178. return "";
  179. }
  180.  
  181. // from https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/StringBuilder.html
  182. StringBuilder sb = new StringBuilder();
  183.  
  184. sb.append("[" + this.head.item.toString());
  185. for (Node<ELEMENT> skip = this.head.next; skip != null; skip = skip.next) {
  186. sb.append(", " + skip.item.toString());
  187. }
  188. sb.append("]");
  189.  
  190. return sb.toString();
  191. }
  192. //endregion
  193.  
  194.  
  195. //region Iterable Methods
  196. @Override
  197. public Iterator<ELEMENT> iterator() {
  198. return new SimpleLinkedListIterator(this.head);
  199. }
  200.  
  201. private class SimpleLinkedListIterator implements Iterator<ELEMENT> {
  202. private Node<ELEMENT> current;
  203.  
  204. public SimpleLinkedListIterator(Node<ELEMENT> current) {
  205. this.current = current;
  206. }
  207.  
  208. @Override
  209. public boolean hasNext() {
  210. return this.current != null;
  211. }
  212.  
  213. @Override
  214. public ELEMENT next() {
  215. if (!this.hasNext()) {
  216. throw new RuntimeException("La lista está vacía...");
  217. }
  218. ELEMENT item = this.current.item;
  219. this.current = this.current.next;
  220. return item;
  221. }
  222.  
  223. }
  224.  
  225.  
  226. //endregion
  227.  
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement