提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、225. 用队列实现栈
1. 注意:声明stack变量的语句
Stack<Integer> stackIn;
Stack<Integer> stackOut;
2. 代码
class MyQueue {
Stack<Integer> stackIn;//注意声明Stack的语句
Stack<Integer> stackOut;
public MyQueue() {
stackIn = new Stack<>();
stackOut = new Stack<>();
}
public void push(int x) {
stackIn.push(x);
}
public int pop() {
dumpStackIn();
return stackOut.pop();
}
public int peek() {
dumpStackIn();
return stackOut.peek();
}
public boolean empty() {
return stackIn.empty() && stackOut.empty();
}
public void dumpStackIn(){
if(!stackOut.isEmpty()){
return;
}
while(!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
}
二、225. 用队列实现栈
1. 我的思路
第二个队列把第一个队列中所有元素呈相反方向呈现。
批注:没有这样的算法,只能用que2保存que1除了需要弹出元素的其他元素
2. 随想录思路
用que2保存que1除了需要弹出元素的其他元素
3. 代码
class MyStack {
Queue<Integer> queue1;
Queue<Integer> queue2;
public MyStack() {
queue1 = new LinkedList<>();
queue2 = new LinkedList<>();
}
public void push(int x) {
queue2.offer(x);
while(!queue1.isEmpty()){
queue2.offer(queue1.poll());
}
Queue<Integer> tmp = new LinkedList<>();
tmp=queue1;
queue1=queue2;
queue2=tmp;
}
public int pop() {
return queue1.poll();
}
public int top() {
return queue1.peek();
}
public boolean empty() {
return queue1.isEmpty();
}
}