Untitled

 avatar
unknown
plain_text
19 days ago
1.8 kB
6
Indexable
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