学弟学妹们,别瞎学算法了,跟着师兄来看懂这道链表题!

Posted 程序员吴师兄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学弟学妹们,别瞎学算法了,跟着师兄来看懂这道链表题!相关的知识,希望对你有一定的参考价值。

一、题目描述

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

示例 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) 的额外空间。

八、相关标签

  • 链表

九、总结

跟着师兄一起刷题

以上是关于学弟学妹们,别瞎学算法了,跟着师兄来看懂这道链表题!的主要内容,如果未能解决你的问题,请参考以下文章

学弟学妹别在迷茫也被瞎学了,熬夜给你们肝了 9 大思维导图,跟着学就行了

厌倦了写活动页的学弟学妹们快来看看,这个页面构建工具忒牛,Github标星27.1k

厌倦了写活动页的学弟学妹们快来看看,这个页面构建工具忒牛,Github标星27.1k

面试官常考的15道链表题,你会多少?建议收藏

刷几道链表题,看看自己对指针的把握程度了

刷几道链表题,看看自己对指针的把握程度了