class MinStack { private Stack<Integer> dataStack; // 用于存储数据的栈 private Stack<Integer> minStack; // 用于存储最小值的栈 /** 初始化MinStack */ public MinStack() { dataStack = new Stack<>(); // 初始化存储数据的栈 minStack = new Stack<>(); // 初始化存储最小值的栈 } /** 将元素x推到栈顶 */ public void push(int x) { dataStack.push(x); // 数据栈间接将x推到栈顶 if (minStack.isEmpty() || x <= minStack.peek()) { // 如果最小值栈为空或者x<=最小值栈顶,将x推到最小值栈顶 minStack.push(x); } } /** 删除栈顶元素 */ public void pop() { if (!dataStack.isEmpty()) { // 如果数据栈不为空 int top = dataStack.pop(); // 删除数据栈顶并获取栈顶元素值 if (top == minStack.peek()) { // 如果删除的元素是最小值栈顶元素 minStack.pop(); // 将最小值栈顶元素也删除 } } } /** 返回栈顶元素 */ public int top() { if (!dataStack.isEmpty()) { // 如果数据栈不为空 return dataStack.peek(); // 间接返回数据栈顶元素 } return -1; // 其余状况返回-1,也能够抛出异样 } /** 返回栈的最小元素 */ public int min() { if (!minStack.isEmpty()) { // 如果最小值栈不为空 return minStack.peek(); // 返回最小值栈顶元素 } return -1; // 其余状况返回-1,也能够抛出异样 }}