class Solution:
    def __init__(self):
        self.stack = []
        self.minstack = []
        
    def push(self, node):
        # write code here
        if len(self.stack) == 0:
            self.stack.append(node)
            self.minstack.append(node)
        else:
            self.stack.append(node)
            if node <= self.minstack[-1]:
                self.minstack.append(node)
            else:
                self.minstack.append(self.minstack[-1])
                
        
        
    def pop(self):
        # write code here
        if not self.stack:
            return None
        else:
            self.stack.pop()
            self.minstack.pop()
            
    def top(self):
        # write code here
        if not self.stack:
            return None
        else:
            return self.stack[-1]
        
    def min(self):
        # write code here
        if not self.minstack:
            return None
        else:
            return self.minstack[-1]

此题的关键是要为min的每次计算设置一个新栈minstack,当新元素入栈时,minstack要检查一下该元素与minstack栈顶元素的大小,若栈顶元素更大则minstack再次入栈栈顶元素,若栈顶元素小于新元素则minstack栈入栈新元素;在出栈时原栈和minstack栈都要出栈栈顶元素,这样每次在弹出minstack栈的栈顶元素时候都能保证得到的元素是最小值。

定义新栈要设置初始化函数,在初始化函数里定义两个栈。