剑指 Offer 06. 从尾到头打印链表(递归、逆置链表、头部动态插入)
题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 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. 从尾到头打印链表(递归、逆置链表、头部动态插入)相关推荐
- 《LeetCode力扣练习》剑指 Offer 06. 从尾到头打印链表 Java
<LeetCode力扣练习>剑指 Offer 06. 从尾到头打印链表 Java 一.资源 题目: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入: ...
- LeetCode Algorithm 剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表 Ideas 遍历链表,每次在vector的头部insert当前元素值. Code C++ class Solution {public:vector< ...
- 【LeetCode】剑指 Offer 06. 从尾到头打印链表
[LeetCode]剑指 Offer 06. 从尾到头打印链表 文章目录 [LeetCode]剑指 Offer 06. 从尾到头打印链表 一.笨比解法 二.递归法 三.辅助栈法 总结 一.笨比解法 算 ...
- 【三种解法】剑指 Offer 06. 从尾到头打印链表【附完整可运行代码】
立志用最少的代码做最高效的表达 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表 ...
- 剑指 Offer 06. 从尾到头打印链表(python3编写)
目录 1.题目描述: 2.方法一:使用栈保存结果 思路: 代码(迭代法): 代码(递归法): 3.方法二:反转链表 思路: 代码: 4.方法三:保存数组,再反转数组 思路: 代码: 5.总结: 1.题 ...
- 剑指offer 06. 从尾到头打印链表
1.问题描述 输入一个链表的头结点,按链表值从尾到头的顺序返回一个ArrayList. 2. 解决思路 由于是反向打印,所以是一个"后进先出"的问题,使用栈来解决,虽然递归的本质就 ...
- Leetcode 240.剑指 Offer 06. 从尾到头打印链表 (每日一题 20210728)
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回).示例 1:输入:head = [1,3,2] 输出:[2,3,1]限制:0 <= 链表长度 <= 10000题目地址:h ...
- 剑指 Offer 06. 从尾到头打印链表(C语言)
*输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10000* ...
- 【算法】剑指 Offer 06. 从尾到头打印链表
1.概述 链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof 输入一个链表的头节点,从尾到头反过来返回 ...
最新文章
- Haskell 差点儿无痛苦上手指南
- Matlab图像处理教程
- 天地伟业tiandy如何连手机_关注 | 天地盖手工盒裱纸选铜版纸还是白牛皮纸?
- what is your judgement basis?
- cdt开发java_Eclipse:可以将CDT和Java IDE放在一起
- c# 拼接Json串的几种方法
- 基于比率的路由到旧版和现代应用程序–通过Spring Cloud的Netflix Zuul
- 10个对Web开发者最有用的Python包
- java8 stream index_Java8的stream用法整理
- Atitit 互联网 技术公司的组织架构 事业部 分公司
- Decode Ways
- svn conflict linux,解决svn update 产生Node remains in conflict的问题
- 火焰识别python_五行属火的字大全
- rhel6 中安装使用finger命令
- 镍氢电池的特性和使用方法(FDK镍氢电池充电机制)
- php汉字转拼音 php 汉字取首字母
- Chrome模拟微信、QQ内置浏览器
- Python 通用爬虫 和讯博客 scrapy
- 使用git在项目中的一些经验
- Java的反射机制 —— 类的镜子