剑指offer:从尾到头打印链表
题目
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
解题思路
在不改变链表结构的前提下,因为单向链表本身的结构是从头到尾的,现在用从尾到头遍历打印,可以联想到“先进后出”,
因此我们可以用栈保存链表节点,然后在输出栈即可。
根据这个思路又可以联想到递归本质上就是一个栈结构,于是又可以用递归来实现,我们要输出一个节点,先输出其后面的结点。
代码
思路一:栈实现
     public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
         ArrayList<Integer> arrayList = new ArrayList<>();
         Stack<ListNode> stack = new Stack<>();
         while(listNode != null){
             stack.push(listNode);
             listNode = listNode.next;
         }
         while(!stack.empty()){
             arrayList.add(stack.pop().val);
         }
         return arrayList;
     }
思路二:递归实现
ArrayList<Integer> arrayList = new ArrayList<>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null){
printListFromTailToHead(listNode.next);
arrayList.add(listNode.val);
}
return arrayList;
}
剑指offer:从尾到头打印链表的更多相关文章
- 剑指Offer 从尾到头打印链表
		题目描述 输入一个链表,从尾到头打印链表每个节点的值. 输入描述: 输入为链表的表头 输出描述: 输出为需要打印的“新链表”的表头 思路: 用容器vector,递归到最后一个元素,push_back到 ... 
- 剑指offer——从尾到头打印链表节点的值
		输入一个链表,从尾到头打印链表每个节点的值. 输入描述:输入为链表的表头 输出描述:输出为需要打印的“新链表”的表头 一.问题分析 初拿到这个题目时,这应该是考察单向链表这一数据结构.单向链表的遍历总 ... 
- 剑指Offer——从尾到头打印链表
		题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 分析: 方法1:利用栈的性质,先从头到尾遍历链表每个节点的值存入栈中,最后一个一个出栈顺序便是从尾到头的. 方法2:直接从头到尾遍历链表存储节 ... 
- 剑指offer —— 从尾到头打印链表
		1.问题:输入一个链表,从尾到头打印链表每个节点的值. /** * public class ListNode { * int val; * ListNode next = null; * * Lis ... 
- 用js刷剑指offer(从尾到头打印链表)
		题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 牛客网链接 js代码 /*function ListNode(x){ this.val = x; this.next = nu ... 
- 4、剑指offer——从尾到头打印链表java实现
		**题目描述** **输入一个链表,按链表从尾到头的顺序返回一个ArrayList.** 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 思路: 1.如果链 ... 
- [剑指Offer]6-从尾到头打印链表
		典型的后进先出,可以借助栈,也可以使用递归. 考虑到若链表过长递归可能造成函数调用栈溢出,所以使用栈更好. 注意stack无遍历操作,全部用push(),pop(),top()完成. 以下创建列表胡乱 ... 
- 剑指Offer-3.从尾到头打印链表(C++/Java)
		题目: 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 分析: 很简单的一道题,其实也就是从尾到头打印链表,题目要求返回ArrayList,其实也就是一个数组. 可以将链表中的元素全部 ... 
- 剑指Offer_6_从尾到头打印链表
		题目描述 输入应该链表的头节点 , 从尾到头反过来打印出每个节点的值.链表定义如下 : typedef struct ListNode { int m_nKey ; ListNode * ... 
- 剑指offer--18.从尾到头打印链表
		递归,逐个加到后面 ------------------------------------------------------------------------------ 时间限制:1秒 空间限 ... 
随机推荐
- [LeetCode]577. Employee Bonus 员工奖金
			Select all employee's name and bonus whose bonus is < 1000. Table:Employee +-------+--------+---- ... 
- STM32F405的内部ADC采集
			1. ADC的初始化部分基本一致,下面是引脚复用配置 void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) { GPIO_InitTypeDef GPIO_Ini ... 
- maven设置阿里云仓库
			到maven安装目录的conf下setting.xml文件 找到mirrors标签中添加 <mirror> <id>nexus-aliyun</id> <mi ... 
- Windows常用网络命令(3)
			5.Netstat Netstat命令可以帮助网络管理员了解网络的整体使用情况.它可以显示当前正在活动的网络连接的详细信息,例如显示网络连接.路由表和网络接口信息,可以统计目前总共有哪些网络连接正在运 ... 
- Java连接数据库——最基础的方式
			JAVAWEB实现增删查改(图书信息管理)之Util类 Util.java ↓ package BookSystem.Other; import java.sql.*; import java.ut ... 
- 【C++札记】函数重载
			概述 函数重载指在相同作用域中多个函数名相同,函数的形参不同. 遵循规则: 1.函数名相同 2.函数的参数,类型,个数或顺序不一样都可以构成重载. 3.函数返回值得类型不同不构成重载,编译直接报错,存 ... 
- (四)pdf的构成之文件体(树图)
			pdf的文件体类似于一个大树 有个根对象(catalog),该对象中保存着PDF的很多基本信息,并通过间接引用,辐射到所有的间接对象. (下图是大概的树形状) 
- redis GEO的使用
			一.概念 redis的GEO特性在Redis3.2版本发布,这个功能可以将用户给定的地理位置信息储存起来,并对这些信息进行操作. GEO常用语LBS(Location Based Service),基 ... 
- Java 枚举和抽象类添加状态值
			枚举: public enum CourseTypeEnum { VIDEO_COURSE(1,"录制课程"), LIVE_COURSE(2,"直播课程"), ... 
- docker容器日志管理(清理)
			原文:docker容器日志管理(清理) 前言 在使用docker容器时候,其日志的管理是我们不得不考虑的事情.因为docker容器的日志文件会占据大量的磁盘空间.下面介绍的就是对docker容器日志的 ... 
