当前位置 博文首页 > 程序员吴师兄的博客:学弟学妹们,别瞎学算法了,跟着师兄来看懂

    程序员吴师兄的博客:学弟学妹们,别瞎学算法了,跟着师兄来看懂

    作者:[db:作者] 时间:2021-06-13 09:38

    一、题目描述

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

    示例 1:

    输入:head = [1,3,2]
    输出:[2,3,1]
    

    限制:

    • 0 <= 链表长度 <= 10000

    二、题目解析

    链表都是从头读到尾依次访问每个节点,题目要求我们 从尾到头 打印链表,这种逆序的操作很显然可以考虑使用

    具有 先入后出 特点的数据结构,那就是

    具体操作如下:

    • 入栈: 遍历链表,将各节点值 push 入栈。
    • 出栈: 将各个节点值 pop 出栈,存储于数组并返回。

    三、动画描述

    https://www.algomooc.com/146.html

    四、图片描述

    面试题06. 从尾到头打印链表.001

    面试题06. 从尾到头打印链表.002

    面试题06. 从尾到头打印链表.003

    面试题06. 从尾到头打印链表.004

    面试题06. 从尾到头打印链表.005

    面试题06. 从尾到头打印链表.006

    面试题06. 从尾到头打印链表.007

    面试题06. 从尾到头打印链表.008

    面试题06. 从尾到头打印链表.009

    面试题06. 从尾到头打印链表.010

    面试题06. 从尾到头打印链表.011

    面试题06. 从尾到头打印链表.012

    面试题06. 从尾到头打印链表.013

    面试题06. 从尾到头打印链表.014

    面试题06. 从尾到头打印链表.015

    面试题06. 从尾到头打印链表.016

    面试题06. 从尾到头打印链表.017

    面试题06. 从尾到头打印链表.018

    五、视频讲解

    https://www.algomooc.com/146.html

    六、参考代码

    class Solution {
        public int[] reversePrint(ListNode head) {
            //
            Deque<Integer> stack = new ArrayDeque<>();
            ListNode curNode = head;
            while (curNode != null) {
                stack.addLast(curNode.val);
                curNode = curNode.next;
            }
            
            int size = stack.size();
            int[] res = new int[size];
            
            for (int i = 0; i < size; i++) {
               res[i] = stack.removeLast();
            }
            return res;
        }
    }
    

    七、复杂度分析

    时间复杂度

    时间复杂度为 O(N),入栈和出栈共使用 O(N) 时间

    空间复杂度

    空间复杂度为 O(N),辅助栈 stack 和数组 res 共使用 O(N) 的额外空间。

    八、相关标签

    • 链表

    九、总结

    跟着师兄一起刷题