剑指offer-3、从尾到头打印链表
题目描述
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
如输入{1,2,3}的链表如下图:

返回一个数组为[3,2,1]
0 <= 链表长度 <= 10000
示例1
输入:
{1,2,3}
返回值:
[3,2,1]
示例2
输入:
{67,0,24,58}
返回值:
[58,24,0,67]
思路及解答
⾸先我们需要想⽤哪些解法可以解,⼤概有如下:
- 使⽤栈
- 使⽤递归调⽤
- 头插法
借助栈实现
先把元素⾥⾯的元素从头到尾遍历取出放在栈⾥⾯,然后再把栈的元素去出来放在ArraList ⾥⾯。主要利⽤了栈的先进后出的规则,这样就可以实现倒序的功能。Java 代码实现如下:
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> stack = new Stack<>();
while (listNode != null) {
stack.push(listNode.val);
listNode = listNode.next;
}
ArrayList<Integer> results = new ArrayList<>();
while (!stack.isEmpty()) {
results.add(stack.pop());
}
return results;
}
}
递归调⽤
前⾯我们能想到栈,那么我们何必⾃⼰实现呢?其实⽅法的调⽤过程,就是⼀个天然的栈调⽤的过程呀,只需要判断当前节点是不是为空,为空则不输出,不为空则递归下⼀个节点,对下⼀个节点处理之后,把结果使⽤ArrayList.addAll() 加到结果中,再把⾃身加到结果中即可:
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> results = new ArrayList<>();
if(listNode!=null){
// 对后⾯的元素进⾏处理
results.addAll(printListFromTailToHead(listNode.next));
// 最后添加⾃身
results.add(listNode.val);
}
return results;
}
}
头插法
遍历每⼀个节点,然后把它插⼊到头部,这样⼀直遍历到尾的时候,就相当于将整个链表都反转⼀遍了,然后再从头到尾遍历放到ArryList 即可。

public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ListNode head = new ListNode(-1);
while(listNode!=null){
// 先把当前node的next保存起来
ListNode temp = listNode.next;
// 把当前节点的next指针指向head的下⼀个节点
listNode.next = head.next;
// 把head的next指向当前节点
head.next = listNode;
// 将遍历的指针指向了遍历的下⼀个元素
listNode = temp;
}
ArrayList<Integer> results = new ArrayList<>();
head = head.next;
// 遍历输出
while(head!=null){
results.add(head.val);
head = head.next;
}
return results;
}
}
剑指offer-3、从尾到头打印链表的更多相关文章
- 《剑指offer》从尾到头打印链表
本题来自<剑指offer> 从尾到头打印链表 题目: 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 思路: 方案一:首先遍历到尾部,然后从尾部进行到头值进行操作,后进先 ...
- 菜鸟刷题路:剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表 class Solution { public int[] reversePrint(ListNode head) { Stack<Integer&g ...
- 力扣 - 剑指 Offer 06. 从尾到头打印链表.md
题目 剑指 Offer 06. 从尾到头打印链表 思路1(递归) 首先先遍历整个脸表,计算出链表的长度(用于初始化数组).然后进行递归,从链表头部递归到尾部,这期间什么都不做,直到递归到最后一个节点的 ...
- 【Java】 剑指offer(5) 从尾到头打印链表
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个链表的头结点,从尾到头反过来打印出每个结点的值.结点定义如下: ...
- Go语言实现:【剑指offer】从尾到头打印链表
该题目来源于牛客网<剑指offer>专题. 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. Go语言实现: type ListNode struct { Val int ...
- [剑指Offer] 3.从尾到头打印链表
题目描述 输入一个链表,从尾到头打印链表每个节点的值. [思路]用一个vector存储,遍历链表时每次从前面插入 /** * struct ListNode { * int val; * struct ...
- [剑指offer]6.从尾到头打印链表+18.删除链表节点
链表 6.从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 方法一 迭代 创建空列表res,将链表值head.val依次存进res,返回翻转后的res 代码 cl ...
- 剑指 Offer 06. 从尾到头打印链表
链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/ 标签:链表 题目 输入一个链表的头节点,从尾到头 ...
- 剑指offer:从尾到头打印链表
题目 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解题思路 在不改变链表结构的前提下,因为单向链表本身的结构是从头到尾的,现在用从尾到头遍历打印,可以联想到“先进后出”, 因此我 ...
- 剑指Offer 3. 从尾到头打印链表 (链表)
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 题目地址 https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35 ...
随机推荐
- C# 托盘图标缓存清除
https://blog.csdn.net/weixin_42953003/article/details/119676004 using System; using System.Collectio ...
- C# WinFrom 中程序完全退出,终止
https://wenku.baidu.com/view/621fbbec0066f5335b81218f.html 一.关闭窗体在c#中退出WinForm 程序包括有很多方法, 如:this.Clo ...
- C# DateTime时间戳帮助类型
https://www.cnblogs.com/minotauros/p/10773258.html /// <summary> /// 时间工具类 /// </summary> ...
- Codeforces Round #705 (Div. 2) AB题解
A. Anti-knapsack 思路:首先比k大的都可以加进来.其次对于小于k的,检验当前集合里面有没有和他相加等于k的,没有的话就可以加进集合.这一步可以覆盖多个数相加的情况. view code ...
- 知网下载 pdf 而不是caj
简介 主要通过F12实现 第一步 按下F12 CAJ全文下载 第二步 将 http://search.cnki.net/down/default.aspx?filename=2004072993.nh ...
- Ansys 学习
简介 应力集中 & 应力奇异性 解释 应力集中 应力集中是设计工程师在设计产品过程中不可避免的问题.指受力构件由 于外界因素或自身因素几何形状.外形尺寸发生突变而引起局部范围内应力显著 增大的 ...
- 使用RestCloud ETL强大的自定义规则实现自定义数据处理算法
实时数据处理规则有什么作用? 在大数据中的实时数据采集.ETL批量数据传输过程中很多数据处理过程以及数据质量都希望实时进行处理和检测并把不符合要求的脏数据过滤掉或者进行实时的数据质量告警等. 在数据仓 ...
- #include <cstring>
在void和int后面的都叫函数吗 2024/3/6 00:10:34 在C++中,void和int等关键字用来表示函数的返回类型,而不是函数本身的名称.函数名称位于返回类型之前.下面是一个简单的函数 ...
- 银河麒麟安装Docker-国产化-九五小庞
银河麒麟高级服务器操作系统 V10 是针对企业级关键业务,适应虚拟化. 云计算.大数据.工业互联网时代对主机系统可靠性.安全性.性能.扩展性和 实时性的需求,依据 CMMI 5 级标准研制的提供内生 ...
- Win11正式版网络错误访问提示0x800704cf的问题
有深度技术的用户在win11正式版系统电脑中出现网络错误提示0x800704cf错误代码,那么如何解决这个问题?接下来,深度官网小编为大家带来详细的解决方案,大家可以一起来看看. 当 Win11 正式 ...