Sha256: d094bc127c64566c41d5399956fa08ec029d505b8ace52a4354435dae6aa5c47

Contents?: true

Size: 1.09 KB

Versions: 107

Compression:

Stored size: 1.09 KB

Contents

class DoubleLinkedList<T> {

    Element<T> head

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

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

    T pop() {
        head = head.prev
        shift()
    }

    T shift() {
        T value = head.value

        def newHead = head.next
        def newTail = head.prev

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

        value
    }

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

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

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

Version data entries

107 entries across 107 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.179 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.178 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.177 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.176 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.175 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.174 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.173 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.172 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.171 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.170 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.169 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.167 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.166 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.165 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.164 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.163 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.162 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.161 tracks/groovy/exercises/double-linked-list/Example.groovy
trackler-2.2.1.160 tracks/groovy/exercises/double-linked-list/Example.groovy