序
本文次要记录一下leetcode栈之用队列实现栈
题目
应用队列实现栈的下列操作:
push(x) -- 元素 x 入栈
pop() -- 移除栈顶元素
top() -- 获取栈顶元素
empty() -- 返回栈是否为空
留神:
你只能应用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是非法的。
你所应用的语言兴许不反对队列。 你能够应用 list 或者 deque(双端队列)来模仿一个队列 , 只有是规范的队列操作即可。
你能够假如所有操作都是无效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。
起源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-stack-using-queues
著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。
题解
class MyStack {
private Queue<Integer> a;
private Queue<Integer> b;
/** Initialize your data structure here. */
public MyStack() {
a = new LinkedList<>();
b = new LinkedList<>();
}
/** Push element x onto stack. */
public void push(int x) {
a.offer(x);
// 将b队列中元素全副转给a队列
while(!b.isEmpty())
a.offer(b.poll());
// 替换a和b,使得a队列没有在push()的时候始终为空队列
Queue temp = a;
a = b;
b = temp;
}
/** Removes the element on top of the stack and returns that element. */
public int pop() {
return b.poll();
}
/** Get the top element. */
public int top() {
return b.peek();
}
/** Returns whether the stack is empty. */
public boolean empty() {
return b.isEmpty();
}
}
/**
* Your MyStack object will be instantiated and called as such:
* MyStack obj = new MyStack();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.top();
* boolean param_4 = obj.empty();
*/
小结
这里应用了两个LinkedList,在push的时候,offer到a队列,而后再将b队列的元素offer到a队列,再替换a、b队列;pop、top、empty的时候间接操作b队列。
doc
- 用队列实现栈
发表回复