leetcode#225 用队列实现栈
程序员文章站
2022-03-09 10:45:36
...
题目描述
使用队列实现栈的下列操作:
- push(x) – 元素 x 入栈
- pop() – 移除栈顶元素
- top() – 获取栈顶元素
- empty() – 返回栈是否为空
解法1:两个队列实现栈
思路:
q1作为最终实现栈的队列,q2作为tmp队列,入栈数据存入q2,,将q1值放入q2,交换
class MyStack {
private Queue<Integer> q1;
private Queue<Integer> q2;
/** Initialize your data structure here. */
public MyStack() {
q1 = new LinkedList<>();
q2 = new LinkedList<>();
}
/** Push element x onto stack. */
public void push(int x) {
q2.offer(x);
if(!q1.isEmpty()){
//将q1的出队列放到q2后面
while(!q1.isEmpty()){
q2.offer(q1.poll());
}
}
Queue<Integer> temp = null;
temp = q2;
q2 = q1;
q1 = temp;
}
/** Removes the element on top of the stack and returns that element. */
public int pop() {
return q1.poll();
}
/** Get the top element. */
public int top() {
return q1.peek();
}
/** Returns whether the stack is empty. */
public boolean empty() {
return q1.isEmpty();
}
}
解法2:一个队列实现栈
class MyStack {
private Queue<Integer> queue;
/** Initialize your data structure here. */
public MyStack() {
queue = new LinkedList<>();
}
/** Push element x onto stack. */
public void push(int x) {
int size = queue.size();
queue.offer(x);
// for(int i=0;i<size;i++){
// queue.offer(queue.poll());
// }
while(size != 0){
queue.offer(queue.poll());
size--;
}
}
/** Removes the element on top of the stack and returns that element. */
public int pop() {
return queue.poll();
}
/** Get the top element. */
public int top() {
return queue.peek();
}
/** Returns whether the stack is empty. */
public boolean empty() {
return queue.isEmpty();
}
}