Created
February 22, 2017 08:52
-
-
Save dbrockman/ed7c31c62b8c097dca3e5e5920f9d525 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Queue<T> { | |
public private(set) var size: Int = 0 | |
private var head: QueueNode<T>? = nil | |
private var tail: QueueNode<T>? = nil | |
public func enqueue(_ value: T) { | |
let newTail = QueueNode(value: value) | |
if let oldTail = tail { | |
newTail.prev = oldTail | |
oldTail.next = newTail | |
} else { | |
head = newTail | |
} | |
tail = newTail | |
size += 1; | |
} | |
public func dequeue() -> T? { | |
guard let oldHead = head else { return nil } | |
let value = oldHead.value | |
if let newHead = oldHead.next { | |
newHead.prev = nil | |
head = newHead | |
} else { | |
head = nil | |
} | |
oldHead.next = nil | |
size -= 1 | |
return value | |
} | |
public var peek: T? { | |
return head?.value | |
} | |
public var isEmpty: Bool { | |
return head == nil | |
} | |
public func clear() { | |
head = nil | |
tail = nil | |
size = 0 | |
} | |
} | |
private class QueueNode<T> { | |
var value: T | |
var next: QueueNode<T>? | |
weak var prev: QueueNode<T>? | |
public init(value: T) { | |
self.value = value | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment