题解 | #用两个栈实现队列#
用两个栈实现队列
http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6
栈的特性:FILO,先进后出
队列的特性:FIFO,先进先出
push操作:
- 仅考虑压栈操作,不考虑空间大小的问题
- 那么仅需往栈1中压入数据
pop操作:
- pop的前提保证栈2中有数据,如果数据不存在就需要
- 需从栈1中pop数据到栈2中,直至栈1弹空(注意一定是弹空的)
- 从栈2中取栈顶位置的数据,zhi'd栈2被弹空
package main
var stack1 [] int
var stack2 [] int
func Push(node int) {
//stack1不需要判断是否栈是否满了,无长度限制
//直接压栈
stack1 = append(stack1, node)
}
func Pop() int{
//stack2为空时,移动stack1的内容到stack2
if len(stack2) == 0 {
for i := 0; i < len(stack1); i++ {
//将stack1的数据,从后往前,全部移到stack2中
stack2 = append(stack2, stack1[len(stack1)-1-i])
}
//stack1置空
stack1 = []int{}
}
//stack2弹出结果
res := stack2[len(stack2)-1] //获取最后一个位置作为栈顶元素
stack2 = stack2[:len(stack2)-1] //左闭右开,取得0~n-2的元素作为新的切片
return res
}

美的集团公司福利 815人发布