0
点赞
收藏
分享

微信扫一扫

[LeetCode]剑指 Offer 06. 从尾到头打印链表

您好 2022-04-05 阅读 54

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

示例 1:

限制:

题解一:

    /**
     * 剑指 Offer 06. 从尾到头打印链表
     * 
     * @param head 链表头节点
     * @return 链表数据逆序数组
     */
    public int[] reversePrint(ListNode head) {
        // 顺序遍历链表并将值放入栈中,当遍历完链表后依次将栈中元素弹出放进数组并返回
        Stack<Integer> dataStack = new Stack<>();
        ListNode cur = head;

        while (cur != null) {
            dataStack.push(cur.val);
            cur = cur.next;
        }

        int size = dataStack.size();
        int[] res = new int[size];
        for (int i = 0; i < size; i++) {
            res[i] = dataStack.pop();
        }
        return res;
    }

题解二:

    private final List<Integer> integerList = new ArrayList<>();

    /**
     * 3. 剑指 Offer 06. 从尾到头打印链表
     *
     * @param head 链表头节点
     * @return 逆序链表值数组
     */
    public int[] reversePrint(ListNode head) {
        /*
         * 递归:利用递归逐层返回的特点,使用辅助方法一直遍历到链表尾,
         * 逐个返回逆序的节点,将节点的值添加到集合中,最后遍历集合元素得到结果数组
         */
        recursion(head);
        int size = integerList.size();
        int[] res = new int[size];
        for (int i = 0; i < size; i++) {
            res[i] = integerList.get(i);
        }
        return res;
    }

    /**
     * 递归遍历链表
     *
     * @param cur 当前节点
     */
    void recursion(ListNode cur) {
        if (cur == null) {
            return;
        }
        recursion(cur.next);
        integerList.add(cur.val);
    }
举报

相关推荐

0 条评论