思路

  1. 先進後出
  2. 紀錄最上面的元素

實作

測試方法

public class Stack_List2 {
    // 配置節點
    static class Node {
        Integer val;
        Node next;

        public Node(Integer val) {
            this.val = val;
        }
    }

    public static void main(String[] args) {
        Integer[] nums = new Integer[]{1,2,3,4,5};
        Stack_List2 stack_list = new Stack_List2(nums);
        stack_list.build_stack();

        // full - extend the storage size
        stack_list.push(6);

        Integer num = stack_list.pop();
        num = stack_list.pop();
        num = stack_list.pop();
        num = stack_list.pop();
        num = stack_list.pop();
        num = stack_list.pop();

        // empty
        num = stack_list.pop();

        // push + pop
        stack_list.push(11);
        stack_list.push(12);
        stack_list.push(13);
        num = stack_list.pop();
        num = stack_list.pop();
        stack_list.push(14);
        num = stack_list.pop();

        System.out.println();
    }

    public void build_stack() {
        for (int i = 0; i < this.ary.length; i++) {
            push(ary[i]);
        }
    }
}

具體

push

public void push(Integer val) {
    if (node_top == null) { // top = null -> 裡面目前沒內容
        node_top = new Node(val); // push new Node on the top
    }else {
        Node node_new = new Node(val);
        node_new.next = node_top; // 把原本 top 放到新的節點後面(next)
        node_top = node_new; // 把top = new Node
    }
}

pop

public Integer pop() {
    if (node_top == null) { // 如果 top = null -> 沒東西
        return null;
    }

    Node node = node_top; // keep 目前top
    node_top = node_top.next; //把 top = 下一個 準備 pop 出保留的原 top

    return node.val; //返回
}