个人推荐使用LinkedList完成堆栈,队列的操作,只需要记忆一种数据类型的方法就够了
push时注意,当整个列表为空,或者最新的一个栈满了,就需要新建一个栈来存储数据
pop后如果栈为空则要删掉
class StackOfPlates {
List<Deque<Integer>> l;
int c;
public StackOfPlates(int cap) {
l = new ArrayList<>();
c = cap;
}
public void push(int val) {
if(l.size() == 0 || l.get(l.size() - 1).size() == c){
Deque<Integer> d = new LinkedList<>();
d.addLast(val);
l.add(d);
}else{
l.get(l.size() - 1).addLast(val);
}
}
public int pop() {
return popAt(l.size() - 1);
}
public int popAt(int index) {
if(l.size() <= index || c == 0 || index < 0)
return -1;
int t = l.get(index).getLast();
l.get(index).removeLast();
if(l.get(index).size() == 0)
l.remove(index);
return t;
}
}