题目
思路
1.一种是用双端队列(Deque),直接就可以调用很多现成的方法,非常方便。
2.另一种是用普通的队列(Queue),要实现栈的先入后出,可以将最后一个元素的前面所有元素出队,然后再重新入队到最后一个元素的后面,这样就实现了先入后出。
举例:入队是 1、2、3,出去我们要让3先出去,只能先让1、2出去,重新入队。这样才能让3先出去。
基础知识
queue的常用方法
Deque(双端队列)常用方法
Deque是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。
补充:插入第一个元素还可以用push()方法。删除第一个元素还可以用pop()方法
//双端队列
import java.util.ArrayDeque;
import java.util.Deque;
//leetcode submit region begin(Prohibit modification and deletion)
class MyStack {
Deque<Integer> quel;
public MyStack() {
quel = new ArrayDeque<>();
}
public void push(int x) {
quel.addLast(x);
}
public int pop() {
return quel.removeLast();
}
public int top() {
return quel.peekLast();
}
public boolean empty() {
return quel.isEmpty();
}
}
//使用一个普通队列
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;
//leetcode submit region begin(Prohibit modification and deletion)
class MyStack {
Queue<Integer> queue;
public MyStack() {
queue = new LinkedList<>();
}
public void push(int x) {
queue.add(x);
}
public int pop() {
int size = queue.size();
while (size > 1) {
queue.add(queue.poll());
size--;
}
return queue.poll();
}
public int top() {
int size = queue.size();
while (size > 1) {
queue.add(queue.poll());
size--;
}
int res = queue.poll();
queue.add(res);
return res;
}
public boolean empty() {
return queue.isEmpty();
}
}