| 49 | |
| 50 | |
| 51 | class Stack(object): |
| 52 | def __init__(self): |
| 53 | self.stack = Node() |
| 54 | self.size = 0 |
| 55 | |
| 56 | def push(self, data): |
| 57 | self.stack = Node(data, self.stack) |
| 58 | self.size += 1 |
| 59 | |
| 60 | def pop(self): |
| 61 | assert self.stack.data is not None, 'Stack is empty' |
| 62 | value = self.stack.data |
| 63 | self.stack.data = self.stack.nextNode.data |
| 64 | self.stack.nextNode = self.stack.nextNode.nextNode |
| 65 | self.size -= 1 |
| 66 | return value |
| 67 | |
| 68 | def peek(self): |
| 69 | assert self.size > 0, 'Stack is empty' |
| 70 | return self.stack.data |
| 71 | |
| 72 | def __str__(self): |
| 73 | stack_copy = deepcopy(self) |
| 74 | tempHolder = [] |
| 75 | while stack_copy.size > 0: |
| 76 | tempHolder.append(stack_copy.pop()) |
| 77 | return ', '.join(map(str, tempHolder[::-1])) |
| 78 | |
| 79 | |
| 80 | if __name__ == "__main__": |