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
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。