题解 | #用两个栈实现队列#
用两个栈实现队列
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 }