链接:代码随想录
文章目录
- 232.用栈实现队列
- 225.用队列实现栈
- 解题方法
- 题目思路
- 示例代码
- 总结
解题思路
1.232.用栈实现队列 解题思路
用两个栈,首先进栈直接进第一个栈,出栈为了满足先进先出的原则,直接按第一个栈的出栈顺序到第二个栈,第二个栈再实现出栈那就满足队列
代码如下(示例):
class MyQueue {
Stack<Integer> stackIn;
Stack<Integer> stackOut;
public MyQueue() {
stackIn = new Stack<>();//栈1
stackOut = new Stack<>();//栈2
}
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());
}
}
}
2.225.用队列实现栈 解题思路
用两个队列,进栈就到第一个队列,出栈则先进队列的到第二个队列,让后进栈的先出,然后再返回第一个队列。
代码如下(示例):
class MyStack {
Queue<Integer> queue1;
Queue<Integer> queue2;
public MyStack() {
queue1 = new LinkedList<>();//队列1
queue2 = new LinkedList<>();//队列2
}
public void push(int x) {
queue2.offer(x);//进队列2
while(!queue1.isEmpty()){
queue2.offer(queue1.poll());
}
Queue<Integer> queueTemp;
queueTemp = queue1;
queue1 = queue2;
queue2 = queueTemp; //交换值,出队列2
}
public int pop() {
return queue1.poll();
}
public int top() {
return queue1.peek();
}
public boolean empty() {
return queue1.isEmpty();
}
}
总结
首先需要熟练掌握Deque,stack,queue这些包含的基本方法,才能更好地运用