使用队列实现栈的下列操作:
-
push(x) – 元素 x 入栈
-
pop() – 移除栈顶元素
-
top() – 获取栈顶元素
-
empty() – 返回栈是否为空
Implement the following operations of a stack using queues. -
push(x) – Push element x onto stack.
-
pop() – Removes the element on top of the stack.
-
top() – Get the top element.
-
empty() – Return whether the stack is empty.
示例:
MyStack stack = new MyStack();
stack.push(1);
stack.push(2);
stack.top(); // 返回 2
stack.pop(); // 返回 2
stack.empty(); // 返回 false
注意:
-
你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。
-
你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
-
你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)
Notes: -
You must use only standard operations of a queue – which means only push to back, peek/pop from front, size, and is empty operations are valid.
-
Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.
-
You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).
解题思路:
方法一(两个队列):
队列先进后出,栈后进先出。用队列实现栈,可以用两个队列完成题解:入栈时用 queue1 来存入节点;出栈时queue1 内节点顺序出队列并入队列到 queue2,直到queue1剩最后一个元素时即为栈顶元素,弹出即可;用一个 top 指针一直指向栈顶元素,top() 方法查询栈顶元素时直接返回 top 指针即可。
方法二(一个队列):
只用一个队列,只需要在入栈时反转队列即可:
入栈存入到队列