forked from luox78/go-algorithms
-
Notifications
You must be signed in to change notification settings - Fork 0
/
liststack.go
62 lines (51 loc) · 949 Bytes
/
liststack.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//
// Package stack liststack.go
// 链表实现的链式栈
//
package stack
import "fmt"
// ListStackNode 链表结点
type ListStackNode struct {
// 数据
Val interface{}
// 下一个结点
next *ListStackNode
}
// ListStack 链式栈结构
type ListStack struct {
// 头结点
head *ListStackNode
// 栈长度
len int
}
// NewListStack 新建链式栈
func NewListStack() *ListStack {
return new(ListStack)
}
// Len 返回栈长度
func (s *ListStack) Len() int { return s.len }
// Push 入栈
func (s *ListStack) Push(v interface{}) {
n := &ListStackNode{Val: v, next: s.head}
s.head = n
s.len++
}
// Pop 出栈
func (s *ListStack) Pop() interface{} {
if s.len == 0 {
return nil
}
n := s.head
s.head = s.head.next
s.len--
return n.Val
}
func (s *ListStack) String() string {
res := fmt.Sprintf("Len: %d, ", s.len)
p := s.head
for p != nil {
res += fmt.Sprintf("-> %v ", p.Val)
p = p.next
}
return res
}