stack.gno
0.51 Kb ยท 43 lines
1package stack
2
3type Stack struct {
4 top *node
5 length int
6}
7
8type node struct {
9 value any
10 prev *node
11}
12
13func New() *Stack {
14 return &Stack{nil, 0}
15}
16
17func (s *Stack) Len() int {
18 return s.length
19}
20
21func (s *Stack) Top() any {
22 if s.length == 0 {
23 return nil
24 }
25 return s.top.value
26}
27
28func (s *Stack) Pop() any {
29 if s.length == 0 {
30 return nil
31 }
32
33 node := s.top
34 s.top = node.prev
35 s.length -= 1
36 return node.value
37}
38
39func (s *Stack) Push(value any) {
40 node := &node{value, s.top}
41 s.top = node
42 s.length += 1
43}