Untitled

 avatar
unknown
plain_text
19 days ago
2.1 kB
12
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.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