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.prev = front; } public void addFirst(T item) { Node<T> newNode = new Node<>(item, front, front.next); front.next.prev = newNode; front.next = newNode; size++; } public void addLast(T item) { if (size == 0) { return null; } Node<T> first = front.next; T value = first.value; front.next = first.next; first.next.prev = front; size--; return value; } public T removeFirst() { if (size == 0) { return null; } Node<T> first = front.next; T value = first.value; front.next = first.next; first.next.prev = front; size--; return value; } public T removeLast() { if (size == 0) { return null; } Node<T> last = back.prev; T value = last.value; back.prev = last.prev; last.prev.next = back; size--; return value; } public T get(int index) { if (index < 0 || index >= size) { return null; } Node<T> curr = front.next; for (int i = 0; i < index; i++) { curr = curr.next; } return curr.value; } public int size() { return size; } }
Leave a Comment