-
Notifications
You must be signed in to change notification settings - Fork 0
/
Contents.swift
58 lines (47 loc) · 1001 Bytes
/
Contents.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//: [Previous](@previous)
//: # Stack
import Foundation
class Node<E> {
var element: E?
var next: Node<E>?
init(element: E) {
self.element = element
}
}
class Stack<E> {
var head: Node<E>?
var size = 0
func push(element: E) {
let lastHead = head
let node = Node(element: element)
head = node
head?.next = lastHead
size += 1
}
func pop() -> E? {
guard let element = head?.element else {
return nil
}
head = head?.next
size -= 1
return element
}
func peek() -> E? {
guard let element = head?.element else {
return nil
}
return element
}
}
//: ## Test Cases
let stack = Stack<Int>()
stack.push(element: 1)
stack.push(element: 2)
stack.push(element: 3)
stack.push(element: 4)
stack.push(element: 5)
stack.pop()
stack.peek()
stack.push(element: 5)
stack.peek()
//: [Next](@next)