-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstack_min.py
62 lines (51 loc) · 1.38 KB
/
stack_min.py
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
59
60
61
62
# 3.2: Stack Min
# Runtime: O(1) - Space: O(1)
class Node:
def __init__(self, value):
self.value = value
self.next = None
self.minimum = None
class Stack:
def __init__(self):
self.top = None
self.minimum = None
def push(self, value):
new_top = Node(value)
new_top.next = self.top
self.top = new_top
if not self.minimum:
self.minimum = new_top
return
if value < self.minimum.value:
new_top.minimum = self.minimum
self.minimum = new_top
else:
new_top.minimum = self.minimum
def pop(self):
item = self.top
self.minimum = self.top.minimum
self.top = self.top.next
return item
def min(self):
return self.minimum
stack = Stack()
stack.push(5)
stack.push(3)
stack.push(2)
stack.push(6)
stack.push(1)
print("top:", stack.top.value)
print("min:", stack.min().value)
print("popped:", stack.pop().value)
print("top:", stack.top.value)
print("min:", stack.min().value)
print("popped:", stack.pop().value)
print("top:", stack.top.value)
print("min:", stack.min().value)
print("popped:", stack.pop().value)
print("top:", stack.top.value)
print("min:", stack.min().value)
print("popped:", stack.pop().value)
print("top:", stack.top.value)
print("min:", stack.min().value)
print("popped:", stack.pop().value)