代码随想录算法训练营第10天 | 232.用栈实现队列、 225. 用队列实现栈
232.用栈实现队列
题目:232.用栈实现队列
文档讲解:代码随想录-232.用栈实现队列
视频讲解:哔哩哔哩-232.用栈实现队列
状态/时间:没写出来/三十分钟
思路:
使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈一个输入栈,一个输出栈,这里要注意输入栈和输出栈的关系。
代码:
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();
}
// 如果stackOut为空,那么将stackIn中的元素全部放到stackOut中
private void dumpstackIn(){
if (!stackOut.isEmpty()) return;
while (!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
}
注意:
需要用两个栈进行实现
225. 用队列实现栈
题目:225. 用队列实现栈
文档讲解:代码随想录-225. 用队列实现栈
视频讲解:哔哩哔哩-225. 用队列实现栈
状态/时间:没写出来/三十分钟
思路:
代码:
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> queueTemp;
queueTemp = queue1;
queue1 = queue2;
queue2 = queueTemp;
}
// 删除元素
public int pop() {
// 因为queue1中的元素和栈中的保持一致,所以这个和下面两个的操作只看queue1
return queue1.poll();
}
// 栈顶元素
public int top() {
return queue1.peek();
}
public boolean empty() {
return queue1.isEmpty();
}
}
注意:
本题还可以用两个栈进行实现,具体可以看卡哥的网站。