我刚开始是想使用LinkedList实现,牛客不让用java的集合,就没用了
想着不让用LinkedList,我就只能自定义一个List了
本着不麻烦够用就行的原则,写了个单链表。算法上没有有点 单纯的判断。
后来看题解,牛客可以用Stack集合,我晕,给个提示啊,能用什么不能用什么,让我大费周折!

private static class MyStack {
        private Node head;
        private int minValue;

        private static class Node {
            Node next;
            int value;

            Node(int value) {
                this.value = value;
            }

            Node(int value, Node next) {
                this.value = value;
                this.next = next;
            }
        }

        public void push(int node) {
            if (head == null) {
                head = new Node(node);
                minValue = node;
            } else {
                head = new Node(node, head);
                // 插入元素比最小值小 就替换最小值
                minValue = minValue < node ? minValue : node;
            }
        }

        public void pop() {
            if (head == null) {
                return;
            }
            // 将头节点指向下个节点
            int headValue = head.value;
            head = head.next;
            // 如果移除的数字和最小值相等 就要寻找最小值了
            if (headValue == minValue) {
                Node n = head;
                // 没有节点了 重置最小值
                if (n == null) {
                    minValue = 0;
                    return;
                }

                // 将头节点值赋给最小值 依次和后面比较
                minValue = n.value;
                while (n != null) {
                    minValue = minValue < n.value ? minValue : n.value;
                    n = n.next;
                }
            }
        }

        public int top() {
            if (head != null) {
                return head.value;
            }
            return -1;
        }

        public int min() {
            return minValue;
        }
    }