node通过prev字段进行关联,stack维护栈顶节点
stack.go
package stack type Stack struct { top *node length int } type node struct { value interface{} prev *node } // 创建一个栈 func New() *Stack { return &Stack{nil,0} } // 取栈长度 func (s *Stack) Len() int { return s.length } // 查看栈顶元素 func (s *Stack) Peek() interface{} { if s.length == 0 { return nil } return s.top.value } // 出栈 func (s *Stack) Pop() interface{} { if s.length == 0 { return nil } n := s.top s.top = n.prev s.length-- return n.value } // 入栈 func (s *Stack) Push(value interface{}) { n := &node{value,s.top} s.top = n s.length++ }
main.go
package main import ( "./stack" "fmt" ) func main() { st := stack.New() st.Push(111) st.Push(222) fmt.Println(st.Peek(),st.Len()) item := st.Pop() fmt.Println(item) fmt.Println(st.Peek(),st.Len()) }
输出:
222 2 222 111 1