题解 | #【模板】栈#

【模板】栈

https://www.nowcoder.com/practice/104ce248c2f04cfb986b92d0548cccbf

import java.util.Scanner;

import java.util.List;
import java.util.ArrayList;
import java.util.Objects;

//push x:将 加x 入栈,保证 x 为 int 型整数
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        Stack stack = new Stack();
        int totalOperate = 0;
        List<String> inputLineList = new ArrayList<>();
        int operateCount = 0;
        while (in.hasNextLine()) {
            String line = in.nextLine();
            int isOperateCount = isOperateCount(line);
            if (isOperateCount != -1) {
                totalOperate = isOperateCount;
                inputLineList = new ArrayList<>(totalOperate);
            } else {
                operateCount++;
                inputLineList.add(line);
            }
            if (operateCount == totalOperate) {
                break;
            }
        }

        if (totalOperate != 0) {
            for (int i = 0; i < inputLineList.size(); i++) {
                String stackOperate = inputLineList.get(i);
                int isOperateCount = isOperateCount(stackOperate);
                if (isOperateCount == -1) {
                    if (stackOperate.contains("push")) {
                        String[] lineArray = stackOperate.split(" ");
                        int value = Integer.parseInt(lineArray[1]);
                        stack.push(value);
                    } else if (stackOperate.contains("pop")) {
                        int popValue = stack.pop();
                        if (popValue == -1) {
                            System.out.println("error");
                        } else {
                            System.out.println(popValue);
                        }
                    } else if (stackOperate.contains("top")) {
                        int topValue = stack.top();
                        if (topValue == -1) {
                            System.out.println("error");
                        } else {
                            System.out.println(topValue);
                        }
                    }
                }
            }
        }
    }

    public static int isOperateCount(String line) {
        try {
            return Integer.parseInt(line);
        } catch (Exception e) {
            return -1;
        }
    }

    public static class Node {
        private int value;
        private Node next;

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

        public void setValue(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }

        public void setNext(Node next) {
            this.next = next;
        }

        public Node getNext() {
            return next;
        }
    }

    public static class Stack {
        private Node head;
        private Node tail;
        private int length = 0;

        public void push(int value) {
            length++;
            if (head == null) {
                head = new Node(value);
                head.next = null;
                tail = head;
            } else {
                Node next = head;
                head = new Node(value);
                head.next = next;
            }

        }

        public int pop() {
            if (length == 0) {
                return -1;
            } else {
                length--;
                int popValue = head.value;
                head = head.next;
                return popValue;
            }
        }

        public int top() {
            if (length == 0) {
                return -1;
            } else {
                int popValue = head.value;
                return popValue;
            }
        }
    }
}

#java##栈#
全部评论

相关推荐

面试摇了我吧:啊哈哈面试提前五个小时发,点击不能参加就是放弃
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务