Untitled
package deques; /** * @see Deque */ public class LinkedDeque<T> extends AbstractDeque<T> { private int size; // IMPORTANT: Do not rename these fields or change their visibility. // We access these during grading to test your code. Node<T> front; Node<T> back; // Feel free to add any additional fields you may need, though. public LinkedDeque() { size = 0; front = new Node<>(null, null, null); back = new Node<>(null, null, null); front.next = back; back.previes = front; } public void addFirst(T item) { Node<T> newNode = new Node<>(item, front, front.next); front.next.previes = newNode; front.next = newNode; size++; } public void addLast(T item) { Node<T> newNode = new Node<>(item, back.previes, back); back.previes.next = newNode; back.previes = newNode; size++; } public T removeFirst() { if (size == 0) { return null; } Node<T> first = front.next; T value = first.value; front.next = first.next; first.next.previes = front; size--; return value; } public T removeLast() { if (size == 0) { return null; } Node<T> last = back.previes; T value = last.value; back.previes = last.previes; last.previes.next = back; size--; return value; } public T get(int index) { if (index < 0 || index >= size) { return null; } if (index < size / 2) { Node<T> current = front.next; for (int i = 0; i < index; i++) { current = current.next; } return current.value; } else { Node<T> current = back.previes; for (int i = size - 1; i > index; i--) { current = current.previes; } return current.value; } } public int size() { return size; } }
Leave a Comment