Leetcode 232. 用栈实现队列
题目链接:232. 用栈实现队列
思路:
用两个栈可以实现队列的基本操作。
解题:成功
代码实现
class MyQueue {
private Stack<Integer> stackIn;
private Stack<Integer> stackOut;
public MyQueue() {
stackIn = new Stack<Integer>();
stackOut = new Stack<Integer>();
}
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();
}
// 养成好习惯,代码复用
public void dumpStackIn(){
if(stackOut.isEmpty()){
while(!stackIn.isEmpty()){
stackOut.push(stackIn.pop());
}
}
}
}
时间复杂度:push 和 empty 为 O(1),pop 和 peek 为 O(n)
空间复杂度:O(n)
Leetcode 225. 用队列实现栈
题目链接:225. 用队列实现栈
思路:
用一个队列就可以模拟栈。
解题:成功
代码实现
class MyStack {
Queue<Integer> queue;
public MyStack() {
queue = new LinkedList<>();
}
public void push(int x) {
queue.offer(x);
}
public int pop() {
rePosition();
return queue.poll();
}
public int top() {
rePosition();
int val = queue.poll();
queue.offer(val);
return val;
}
public boolean empty() {
return queue.isEmpty();
}
private void rePosition(){
int size = queue.size();
for(int i = 1; i <= size - 1; i++){
queue.offer(queue.poll());
}
}
}