题目:最小栈
题目要求写一个MinStack
的数据结构,实现push
,pop
,top
,getMin
等方法;
思路分析:
- 成员变量:定义两个队列
stackA
和stackB
- 构造方法:给两个队列创建对象
push
: 添加元素e
的时候,stackA
正常添加,stackB
需要比较一下,如果e
小于等于栈顶元素的话,就添加,否则,过!!pop
: 弹出的时候stackA
正常弹出栈顶元素e
,如果stackB
的栈顶元素和e
相同,那么stackB
也要弹出栈顶元素;top
: 直接读取stackA
的栈顶元素;getMin
: 直接读取stackB
的栈顶元素;
class MinStack {
//成员变量
private LinkedList<Integer> stackA;
private LinkedList<Integer> stackB;
//构造方法
public MinStack() {
stackA = new LinkedList<>();
stackB = new LinkedList<>();
}
//成员方法
public void push(int x) {
stackA.push(x);
if(stackB.isEmpty() || x <= stackB.peek()){
stackB.push(x);
}
}
public void pop() {
int e = stackA.pop();
if(!stackB.isEmpty() && e == stackB.peek()){
stackB.pop();
}
}
public int top() {
return stackA.peek();
}
public int getMin() {
return stackB.peek();
}
}