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

一、题目描述

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

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

八、相关标签

  • 链表

九、总结

跟着师兄一起刷题

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值