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

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

限制:
0 <= 链表长度 <= 10000

解法一:递归(递归本来就是一种栈,所以算做一类)

func reversePrint(head *ListNode) []int {if head == nil {return []int{}}if head.Next == nil {return []int{head.Val}}return append(reversePrint(head.Next), head.Val)
}

解法二:逆置链表

func reversePrint(head *ListNode) []int {if head == nil {return []int{}}// 逆置链表fistNode, mindNode := head, head.NextfistNode.Next = nilfor {if mindNode == nil {break}endNode := mindNode.NextmindNode.Next = fistNodefistNode = mindNodemindNode = endNode}vals := make([]int,0)for {if fistNode == nil {return vals}vals = append(vals, fistNode.Val)fistNode = fistNode.Next}
}


解法三:头部动态插入(模拟切片动态扩容)

func reversePrint(head *ListNode) []int {if head == nil {return []int{}}vals := make([]int, 4)endIndex := len(vals)for {endIndex--if head == nil {break}vals[endIndex] = head.Valif endIndex == 0 {vals, endIndex = dilatation(vals)}head = head.Next}return vals[endIndex+1:]
}func dilatation(arr []int) ([]int, int) {lenArr := len(arr)restfulSize := lenArr + lenArr/2restful := make([]int, restfulSize)endIndex := len(restful)arrIndex := lenArr - 1for {if arrIndex < 0 {break}endIndex--restful[endIndex] = arr[arrIndex]arrIndex--}return restful, endIndex
}


总结:可以看出头部动态插入与逆置链表再执行速度相同的情况下占用的空间还是比递归少一些,虽然不是官方解法。

剑指 Offer 06. 从尾到头打印链表(递归、逆置链表、头部动态插入)相关推荐

  1. 《LeetCode力扣练习》剑指 Offer 06. 从尾到头打印链表 Java

    <LeetCode力扣练习>剑指 Offer 06. 从尾到头打印链表 Java 一.资源 题目: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入: ...

  2. LeetCode Algorithm 剑指 Offer 06. 从尾到头打印链表

    剑指 Offer 06. 从尾到头打印链表 Ideas 遍历链表,每次在vector的头部insert当前元素值. Code C++ class Solution {public:vector< ...

  3. 【LeetCode】剑指 Offer 06. 从尾到头打印链表

    [LeetCode]剑指 Offer 06. 从尾到头打印链表 文章目录 [LeetCode]剑指 Offer 06. 从尾到头打印链表 一.笨比解法 二.递归法 三.辅助栈法 总结 一.笨比解法 算 ...

  4. 【三种解法】剑指 Offer 06. 从尾到头打印链表【附完整可运行代码】

    立志用最少的代码做最高效的表达 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表 ...

  5. 剑指 Offer 06. 从尾到头打印链表(python3编写)

    目录 1.题目描述: 2.方法一:使用栈保存结果 思路: 代码(迭代法): 代码(递归法): 3.方法二:反转链表 思路: 代码: 4.方法三:保存数组,再反转数组 思路: 代码: 5.总结: 1.题 ...

  6. 剑指offer 06. 从尾到头打印链表

    1.问题描述 输入一个链表的头结点,按链表值从尾到头的顺序返回一个ArrayList. 2. 解决思路 由于是反向打印,所以是一个"后进先出"的问题,使用栈来解决,虽然递归的本质就 ...

  7. Leetcode 240.剑指 Offer 06. 从尾到头打印链表 (每日一题 20210728)

    输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回).示例 1:输入:head = [1,3,2] 输出:[2,3,1]限制:0 <= 链表长度 <= 10000题目地址:h ...

  8. 剑指 Offer 06. 从尾到头打印链表(C语言)

    *输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10000* ...

  9. 【算法】剑指 Offer 06. 从尾到头打印链表

    1.概述 链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof 输入一个链表的头节点,从尾到头反过来返回 ...

最新文章

  1. Haskell 差点儿无痛苦上手指南
  2. Matlab图像处理教程
  3. 天地伟业tiandy如何连手机_关注 | 天地盖手工盒裱纸选铜版纸还是白牛皮纸?
  4. what is your judgement basis?
  5. cdt开发java_Eclipse:可以将CDT和Java IDE放在一起
  6. c# 拼接Json串的几种方法
  7. 基于比率的路由到旧版和现代应用程序–通过Spring Cloud的Netflix Zuul
  8. 10个对Web开发者最有用的Python包
  9. java8 stream index_Java8的stream用法整理
  10. Atitit 互联网 技术公司的组织架构 事业部 分公司
  11. Decode Ways
  12. svn conflict linux,解决svn update 产生Node remains in conflict的问题
  13. 火焰识别python_五行属火的字大全
  14. rhel6 中安装使用finger命令
  15. 镍氢电池的特性和使用方法(FDK镍氢电池充电机制)
  16. php汉字转拼音 php 汉字取首字母
  17. Chrome模拟微信、QQ内置浏览器
  18. Python 通用爬虫 和讯博客 scrapy
  19. 使用git在项目中的一些经验
  20. Java的反射机制 —— 类的镜子

热门文章

  1. 论文浅尝 - AAAI2020 | 多轮对话系统中的历史自适应知识融合机制
  2. 技术动态 | 67 亿美金搞个图,创建知识图谱的成本有多高你知道吗?
  3. 执行Dockerfile构建基础镜像,建立python工作环境
  4. Base64加解密的实现方式
  5. ajax发送数据时的contentType
  6. QT QTransform与QMatrix 有啥区别?
  7. PDA 收银系统PDA手持打印扫描枪 销售开单 收银 扫描打印一体机
  8. ligerDialog的使用
  9. [转载] 一致性哈希
  10. android:给程序加锁