Sha256: 493f080995d80e27fd1cdb3e12a3551ef43e7643eb228d5e05391a3bae52ff4a

Contents?: true

Size: 1005 Bytes

Versions: 396

Compression:

Stored size: 1005 Bytes

Contents

class Deque<T> {
    private var head: Element<T>? = null

    fun push(value: T) {
        if(head == null) {
            head = Element(value)
            head?.prev = head
            head?.next = head
        } else {
            val oldTail = head?.prev
            val tail = Element(value, prev = oldTail, next = head)
            oldTail?.next = tail
            head?.prev = tail
        }

    }

    fun pop(): T? {
        head = head?.prev
        return shift()
    }

    fun unshift(value: T) {
        push(value)
        head = head?.prev
    }

    fun shift(): T? {
        val value = head?.value
        val newHead = head?.next
        val newTail = head?.prev

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

        return value
    }

    private data class Element<T>(val value: T, var prev: Element<T>? = null, var next: Element<T>? = null)
}

Version data entries

396 entries across 396 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.179 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.178 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.177 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.176 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.175 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.174 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.173 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.172 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.171 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.170 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.169 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.167 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.166 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.165 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.164 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.163 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.162 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.161 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt
trackler-2.2.1.160 tracks/kotlin/exercises/linked-list/.meta/src/reference/kotlin/Deque.kt