//时间O1,空间Ontype MyQueue struct { inStack, outStack []int}//初始化队列 ofunc 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}
//牛客网答案,感觉好简洁
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弹出结果
}