Sha256: 25b623ba13364f0e731428686d24c06b1c3b611e429ed0745b1a81b9fc9f4849

Contents?: true

Size: 1.73 KB

Versions: 325

Compression:

Stored size: 1.73 KB

Contents

class Node<T> {
    var value: T?
    var next: Node?
    var prev: Node?

    init() {
    }

    init(value: T) {
        self.value = value
    }

}

class Deque<T> {
    var count: Int = 0
    var head: Node<T>
    var tail: Node<T>

    init() {
        self.head = Node<T>()
        self.tail = head

    }

    func isEmpty() -> Bool {
        return self.count == 0
    }

    func push(_ value: T) {
        let node = Node<T>(value: value)
        if self.isEmpty() {
            self.head = node
            self.tail = node
        } else {
            node.next = self.head
            self.head.prev = node
            self.head = node
        }
        self.count += 1
    }

    func unshift(_ value: T) {
        let node = Node<T>(value: value)
        if self.isEmpty() {
            self.head = node
            self.tail = node
        } else {
            node.prev = self.tail
            self.tail.next = node
            self.tail = node
        }
        self.count += 1
    }

    func pop() -> T? {
        if self.isEmpty() {
            return nil
        } else if self.count == 1 {
            let temp: Node<T> = self.head
            self.count -= 1
            return temp.value
        } else {
            let temp: Node<T> = self.head
            self.head = self.head.next!
            self.count -= 1
            return temp.value
        }
    }
    func shift() -> T? {
        if self.isEmpty() {
            return nil
        } else if self.count == 1 {
            let temp: Node<T> = self.tail
            self.count -= 1
            return temp.value
        } else {
            let temp: Node<T> = self.tail
            self.tail = self.tail.prev!
            self.count -= 1
            return temp.value
        }
    }
}

Version data entries

325 entries across 325 versions & 1 rubygems

Version Path
trackler-2.2.1.139 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.138 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.137 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.136 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.135 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.134 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.133 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.132 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.131 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.130 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.129 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.128 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.127 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.126 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.125 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.124 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.123 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.122 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.121 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift
trackler-2.2.1.120 tracks/swift/exercises/linked-list/Sources/LinkedListExample.swift