232. 用栈实现队列
stack1 做输入栈,stack2 做输出栈。重点是 pop、peek 时,如果 stack2 为空,则先将 stack1 中的元素全部倒入 stack2 中。
class MyQueue {
Stack<Integer> stack1;
Stack<Integer> stack2;
public MyQueue() {stack1 = new Stack<>();
stack2 = new Stack<>();}
public void push(int x) {stack1.push(x);
}
public int pop() {if (stack2.isEmpty()) {while (!stack1.isEmpty()) {stack2.push(stack1.pop());
}
}
return stack2.pop();}
public int peek() {if (stack2.isEmpty()) {while (!stack1.isEmpty()) {stack2.push(stack1.pop());
}
}
int top = stack2.peek();
return top;
}
public boolean empty() {return stack1.size() == 0 && stack2.size() == 0;}
}
225. 用队列实现栈
queue1 用来存放数据,queue2 在 queue1 腾地方时临时存放 queue1 的数据。
class MyStack {
Queue<Integer> queue1;
Queue<Integer> queue2;
public MyStack() {queue1 = new LinkedList<>();
queue2 = new LinkedList<>();}
// 模拟栈,即先把 queue1 腾至 queue2,把新元素放进去,再把旧元素放回去
public void push(int x) {while (!queue1.isEmpty()) {queue2.offer(queue1.remove());
}
queue1.offer(x);
while (!queue2.isEmpty()) {queue1.offer(queue2.remove());
}
}
// 因为 queue2 只在 push 时临时存放数据,平常是空的,所以下面操作的都是 queue1
public int pop() {return queue1.remove();
}
public int top() {return queue1.peek();
}
public boolean empty() {return queue1.isEmpty();
}
}
正文完