Sha256: 06b24d881abdc20619e540c8353719fee9fb0b852a422cb08a47f0e51c400cb8

Contents?: true

Size: 1.25 KB

Versions: 196

Compression:

Stored size: 1.25 KB

Contents

public final class DoublyLinkedList<T> {
    private Element<T> head;

    public void push(T value) {
        if (head == null) {
            head = new Element<>(value, null, null);
            head.next = head;
            head.prev = head;
            return;
        }

        Element<T> oldTail = head.prev;
        Element<T> tail = new Element<>(value, oldTail, head);
        oldTail.next = tail;
        head.prev = tail;
    }

    public T pop() {
        head = head.prev;
        return shift();
    }

    public void unshift(T value) {
        push(value);
        head = head.prev;
    }

    public T shift() {
        T value = head.value;

        Element<T> newHead = head.next;
        Element<T> newTail = head.prev;

        if (newHead == head) {
            head = null;
        }
        else {
            newHead.prev = newTail;
            newTail.next = newHead;
            head = newHead;
        }

        return value;
    }

    private static final class Element<T> {
        private final T value;
        private Element<T> prev;
        private Element<T> next;

        public Element(T value, Element<T> prev, Element<T> next) {
            this.value = value;
            this.prev = prev;
            this.next = next;
        }
    }
}

Version data entries

196 entries across 196 versions & 1 rubygems

Version Path
trackler-2.2.1.72 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.71 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.70 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.69 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.68 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.67 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.66 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.65 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.64 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.63 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.62 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.61 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.60 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.59 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.58 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.57 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.56 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.55 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.54 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java
trackler-2.2.1.53 tracks/java/exercises/linked-list/.meta/src/reference/java/DoublyLinkedList.java