题目描述

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

如输入{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、从尾到头打印链表的更多相关文章

  1. 《剑指offer》从尾到头打印链表

    本题来自<剑指offer> 从尾到头打印链表 题目: 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 思路: 方案一:首先遍历到尾部,然后从尾部进行到头值进行操作,后进先 ...

  2. 菜鸟刷题路:剑指 Offer 06. 从尾到头打印链表

    剑指 Offer 06. 从尾到头打印链表 class Solution { public int[] reversePrint(ListNode head) { Stack<Integer&g ...

  3. 力扣 - 剑指 Offer 06. 从尾到头打印链表.md

    题目 剑指 Offer 06. 从尾到头打印链表 思路1(递归) 首先先遍历整个脸表,计算出链表的长度(用于初始化数组).然后进行递归,从链表头部递归到尾部,这期间什么都不做,直到递归到最后一个节点的 ...

  4. 【Java】 剑指offer(5) 从尾到头打印链表

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个链表的头结点,从尾到头反过来打印出每个结点的值.结点定义如下: ...

  5. Go语言实现:【剑指offer】从尾到头打印链表

    该题目来源于牛客网<剑指offer>专题.​ 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. Go语言实现: type ListNode struct { Val int ...

  6. [剑指Offer] 3.从尾到头打印链表

    题目描述 输入一个链表,从尾到头打印链表每个节点的值. [思路]用一个vector存储,遍历链表时每次从前面插入 /** * struct ListNode { * int val; * struct ...

  7. [剑指offer]6.从尾到头打印链表+18.删除链表节点

    链表 6.从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 方法一 迭代 创建空列表res,将链表值head.val依次存进res,返回翻转后的res 代码 cl ...

  8. 剑指 Offer 06. 从尾到头打印链表

    链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/ 标签:链表 题目 输入一个链表的头节点,从尾到头 ...

  9. 剑指offer:从尾到头打印链表

    题目 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解题思路 在不改变链表结构的前提下,因为单向链表本身的结构是从头到尾的,现在用从尾到头遍历打印,可以联想到“先进后出”, 因此我 ...

  10. 剑指Offer 3. 从尾到头打印链表 (链表)

    题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 题目地址 https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35 ...

随机推荐

  1. vue_条件渲染、列表渲染

    条件渲染 <html lang="en"> <head> <meta charset="UTF-8"> <title& ...

  2. 保姆级教程:跟虚竹哥用Gemini-2.5-pro,一步搞定任何内容的思维导图,国内直接使用

    零.前言 每一份厚重的报告,每一篇深奥的论文,都像一座等待探索的知识矿山.我们常常深陷于文字的细节中,却迷失了通往宝藏的路径.你是否想过,如果有一张地图,能清晰标示出每一条知识的脉络与连接,这场探索之 ...

  3. Java开发AI项目,太爽了!LangChain4j保姆级教程

    大家好,我是程序员鱼皮.现在 AI 应用开发可以说是程序员必备的技能了,求职时能够大幅增加竞争力.之前我用 Spring AI 带大家做过一个 开源的 AI 超级智能体项目,这次我来带大家快速掌握另一 ...

  4. 前端开发系列126-进阶篇之Rollup

    本文简单介绍类库打包工具 rollup . Rollup 是一款 JavaScript 模块打包器,可以将多个简单的js代码文件编译成一份复杂的js代码文件,需要注意的是 Rollup 主要用于Jav ...

  5. 图片生成对嘴视频FLOAT

    之前已经介绍过图片对嘴生成视频的开源工具: DICE-Talk:https://www.cnblogs.com/cj8988/p/18957718   (带表情,比较慢) ComfyUI_Sonic: ...

  6. iPaaS 平台在企业中的定位及集成方式

    iPaaS 平台在企业中的定位是作为 IT 架构的基础底座能力之一,是构建业务中台的关键组件,同时也为数据中台提供支撑服务.它在企业中承担着连接.集成和管理不同系统.应用程序和数据的重要角色,为企业的 ...

  7. ETL快速同步 用友u8数据方式

    在企业信息化进程中,用友U8作为一款广泛应用的ERP系统,承载着企业核心业务数据.为了实现这些数据的有效利用与深度分析,往往需要通过ETL(Extract, Transform, Load)工具进行快 ...

  8. Living-Food-自制 养殖:鸡鸭鹅/牛羊鱼 + 种植:蔬菜/蘑菇 + 主食: 米线/米粉

    Living-Food-自制 主食: 米线/米粉 养殖:鸡鸭鹅/牛羊鱼 公母混养. 温度.湿度.自然环境(自然土壤.通风透气.采光).野生环境(种子/阳光/水/土壤/空气) 食物:稻谷饲料.红薯.苔藓 ...

  9. Load text: https://tensorflow.google.cn/tutorials/load_data/text

    Tensorflow Load text: This tutorial demonstrates two ways to load and preprocess text. First, you wi ...

  10. ICEE-Datasheet: 找Datasheet 的好去处DigiKey.com,Mouser.com,Arrow.com, AllDatasheet.com加各大原产商官网

    找Datasheet 的好去处: DigiKey,Mouser,Arrow 三家全球最大的电子元器件采购平台,搜索到的元器件页面会有Datasheet可供下载. https://www.digikey ...