题解 | #用两个栈实现队列#
用两个栈实现队列
http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6
//牛客网答案,感觉好简洁 package main var stack1 [] int var stack2 [] int func Push(node int) { stack1 = append(stack1, node) //直接压栈,stack1无需判断是否栈满了,无长度限制 } func Pop() int{ if len(stack2) == 0 { //stack2为空时,移动stack1的内容到stack2 for i := 0; i < len(stack1); i++ { //将stack1的数据,从后往前,全部移到stack2中 stack2 = append(stack2, stack1[len(stack1)-1-i]) } stack1 = []int{} //stack1置空 } res := stack2[len(stack2)-1] //获取最后一个位置作为栈顶元素 stack2 = stack2[:len(stack2)-1] //左闭右开,取得0~n-2的元素作为新的切片 return res //stack2弹出结果 } /* //总函数,力扣的解答,反正是贼麻烦,手写无望 type MyQueue struct { inStack, outStack []int } //初始化队列 func Constructor() MyQueue { return MyQueue{} } // push增加队尾元素 func (q *MyQueue) Push(x int) { q.inStack = append(q.inStack, x) } func (q *MyQueue) in2out() { for len(q.inStack) > 0 { q.outStack = append(q.outStack, q.inStack[len(q.inStack)-1]) q.inStack = q.inStack[ :len(q.inStack)-1] } } //pop出队 func (q *MyQueue) Pop() int { if len(q.outStack) == 0 { q.in2out() } x := q.outStack[len(q.outStack)-1] q.outStack = q.outStack[ :len(q.outStack)-1] return x } //peek查询队首元素 func (q *MyQueue) Peek() int { if len(q.outStack) == 0 { q.in2out() } x := q.outStack[len(q.outStack)-1] return x } //判断empty, 结束值 func (q *MyQueue) Empty() bool { return len(q.inStack) == 0 && len(q.outStack) == 0 } */