class Node {    public int value;    public Node next;    public Node(int v) {        this.value = v;    }    @Override    public String toString() {        return "Node{" + "value=" + value + '}';    }}
/** * 用单链表实现堆栈 */public class SingleLinkedListStackDemo {    public static void main(String[] args) {        SingleLinkedListStack stack = new SingleLinkedListStack(5);        String key;        boolean loop = true;        Scanner scanner = new Scanner(System.in);        while (loop) {            System.out.println("===================");            System.out.println("请输入下列指令");            System.out.println("show: 展示栈内容");            System.out.println("pop: 出栈");            System.out.println("push: 入栈");            System.out.println("peek: 栈顶元素");            System.out.println("exit: 退出程序");            System.out.println("===================");            key = scanner.next();            switch (key) {                case "show":                    stack.show();                    break;                case "push":                    System.out.println("输入一个数");                    int value = scanner.nextInt();                    stack.push(value);                    break;                case "peek":                    try {                        System.out.println("栈顶数值是: " + stack.peek());                    } catch (Exception e) {                        System.out.println(e.getMessage());                    }                    break;                case "pop":                    try {                        int v = stack.pop();                        System.out.println("出栈数值: " + v);                    } catch (Exception e) {                        System.out.println(e.getMessage());                    }                    break;                case "exit":                    scanner.close();                    loop = false;                    break;                default:                    break;            }        }        System.out.println("Exit app successfully!");    }}class SingleLinkedListStack {    private Node head;    private int maxSize;    private int size;    public SingleLinkedListStack(int max) {        head = new Node(-1);        maxSize = max;        size = 0;    }    public boolean isEmpty() {        return size == 0;    }    public boolean isFull() {        return size == maxSize;    }    public int peek() {        if (isEmpty()) throw new RuntimeException("栈是空的,peek失败!");        return head.next.value;    }    public void push(int n) {        if (isFull()) {            System.out.println("栈满了,不能继续push!");            return;        }        Node node = new Node(n);        node.next = head.next;        head.next = node;        size++;    }    public int pop() {        if (isEmpty()) {            throw new RuntimeException("栈是空的,pop失败!");        }        int v = head.next.value;        head.next = head.next.next;        size--;        return v;    }    public void show() {        if (isEmpty()) {            System.out.println("栈为空!show不出来!");            return;        }        show(head.next);    }    private void show(Node node) {        if (node == null) return;        System.out.println(node.value);        show(node.next);    }}