随想录训练营Day10| 232.用栈实现队列, 225. 用队列实现栈
标签: LeetCode闯关记
##**1. ** ###1.1 题目 相关链接 232.用栈实现队列
###1.2 解题思路 用两个栈来实现, stackIn and stackOut; 实现方法中,最重要的是: pop() 和 peek()的共同操作,即把stackIn中的元素转移到stackOut中; ###1.3 遇到问题
###1.4 算法实现
class MyQueue {
Stack<Integer> stackIn;
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.isEmpty() && stackOut.isEmpty();
}
private void dumpstackIn(){
if(!stackOut.isEmpty())return;
while(!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
}
###1.5 题目总结 解题耗时:40min ###1.6 疑惑 Stack, Deque, LinkedList, ArrayDeque的关系?
##2. 225. 用队列实现栈 ###2.1 题目 225. 用队列实现栈 ###2.2 解题思路 用一个队列(Deque)来实现,关键是pop()方法的实现, 确定为了弹出栈的第一个元素,需要在队列中pop并push的(size - 1)个元素; ###2.3 遇到问题
###2.4 实现代码
class MyStack {
// Deque 接口继承了 Queue 接口
// 所以 Queue 中的 add、poll、peek等效于 Deque 中的 addLast、pollFirst、peekFirst
Deque<Integer> que1;
public MyStack() {
que1 = new ArrayDeque<>();
}
public void push(int x) {
que1.addLast(x);
}
public int pop() {
int size = que1.size();
while(size > 1) {// 将 (size - 1)个元素 导入 到 目标元素之后
que1.addLast(que1.peekFirst()); //先导入
que1.pollFirst();//后弹出
size--;
}
int res = que1.pollFirst();
return res;
}
public int top() {
return que1.peekLast();
}
public boolean empty() {
return que1.isEmpty();
}
}
###2.5 题目总结 解题耗时: 40min ###2.6 相关题目
###3. 总结 对队列和栈的实现对象和各种方法都不懂. 3.27 补 3.24