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}