刷题日记09
今天的主题:栈与队列
232. 用栈实现队列
用栈实现队列需要两个栈来模拟队列,在弹出时先把in里面的元素全部转移到out里。
在转移之前,如果out里有元素,那就直接弹出。这里写了一个dump函数专门做转移。值得注意的是如果out里有元素了,还进行转移会导致元素顺序混乱。
class MyQueue {
Stack<Integer> in;
Stack<Integer> out;
public MyQueue() {
in = new Stack<Integer>();
out = new Stack<Integer>();
}
public void push(int x) {
in.push(x);
}
public int pop() {
dumpInToOut();
return out.pop();
}
public int peek() {
dumpInToOut();
return out.peek();
}
public boolean empty() {
return in.empty() && out.empty();
}
public void dumpInToOut(){
// 如果out不为空,则不进行dump,否则会导致元素顺序混乱
if(!out.isEmpty()) return;
while(!in.isEmpty()){
int temp = in.pop();
out.push(temp);
}
}
}
225. 用队列实现栈
这里复习一下java里的双端队列Deque
添加元素:offer(), offerFirst(), offerLast()
返回元素:peek(), peekFirst(), peekLast()
弹出元素:poll(), pollFirst(), pollLast()
class MyStack {
Deque<Integer> queue;
public MyStack() {
queue = new ArrayDeque<>();
}
public void push(int x) {
queue.offerLast(x);
}
public int pop() {
return queue.pollLast();
}
public int top() {
return queue.peekLast();
}
public boolean empty() {
return queue.size() == 0;
}
}