[刷题记录Day10]Leetcode
No.1
题目
用栈实现队列
思路
- 模拟
- 一个入栈一个出栈
代码
class MyQueue {
private Stack<Integer> stackIn;
private Stack<Integer> stackOut;
public MyQueue() {
stackIn = new Stack<>();
stackOut = new Stack<>();
}
public void push(int x) {
stackIn.push(x);
}
public int pop() {
if (stackOut.empty()) {
while (!stackIn.empty())
stackOut.push(stackIn.pop());
}
// pop时要保证stackIn的元素全部转移完毕
return stackOut.pop();
}
public int peek() {
if (stackOut.empty()) {
while (!stackIn.empty())
stackOut.push(stackIn.pop());
}
// peek时要保证stackIn的元素全部转移完毕
return stackOut.peek();
}
public boolean empty() {
return stackIn.empty() && stackOut.empty();
}
}
No.2
题目
用队列实现栈
思路
- 用两个队列que1和que2实现栈的功能,que2其实完全就是一个备份的作用,把que1最后面的元素以外的元素都备份到que2,然后弹出最后面的元素,再把其他元素从que2导回que1
代码
class MyStack {
private Queue<Integer> queue1;
private Queue<Integer> queue2;
public MyStack() {
queue1 = new LinkedList<>();
queue2 = new LinkedList<>();
}
public void push(int x) {
queue1.add(x);
// 保证queue1仅包含最后一个元素
while (queue1.size() > 1)
queue2.add(queue1.poll());
}
public int pop() {
int res = queue1.poll();
// 保证queue2仅包含最后一个元素
while (queue2.size() > 1)
queue1.add(queue2.poll());
// 交换queue1和queue2
Queue<Integer> tempQ = queue1;
queue1 = queue2;
queue2 = tempQ;
return res;
}
public int top() {
return queue1.peek();
}
public boolean empty() {
return queue1.isEmpty() && queue2.isEmpty();
}
}