描述

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

示例1

输入:{1,2,3}

返回值:[3,2,1]

示例2

输入:{67,0,24,58}

返回值:[58,24,0,67]

单向链表介绍

链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,实现原理是数组。而LinkedList的实现原理就是链表。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。
单向链表是一种线性表,实际上是由节点(Node)组成的,一个链表拥有不定数量的节点。其数据在内存中存储是不连续的,它存储的数据分散在内存中,每个结点只能也只有它能知道下一个结点的存储位置。由N各节点(Node)组成单向链表,每一个Node记录本Node的数据及下一个Node。向外暴露的只有一个头节点(Head),我们对链表的所有操作,都是直接或者间接地通过其头节点来进行的。

上图中最左边的节点即为头结点(Head),但是添加节点的顺序是从右向左的,也就是尾插。最先添加的节点(Head)对下一节点的引用可以为空。引用是引用下一个节点的地址而非下一个节点的对象。因为有着不断的引用,所以头节点就可以操作所有节点了。
下图描述了单向链表存储情况。存储是分散的,每一个节点只要记录下一节点,就把所有数据串了起来,形成了一个单向链表。

节点(Node)是由一个需要储存的对象(val或者data)及对下一个节点的引用(Node.next)组成的。也就是说,节点拥有两个成员:储存的对象、对下一个节点的引用。下面图是具体的说明:

package com.LeetCodeProblem;
import java.util.ArrayList;public class JZ3 {
//正常求解public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {ArrayList<Integer> temp = new ArrayList<>();ArrayList<Integer> res = new ArrayList<>();//创建临时list和结果listwhile (listNode!=null){temp.add(listNode.val);listNode=listNode.next;}//反转赋值for (int i = temp.size();i>=0 ; i--) {res.add(temp.get(i));}return res;}
package com.LeetCodeProblem;
import java.util.ArrayList;//利用递归
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {ArrayList<Integer> res = new ArrayList<>();if(listNode!=null) {res.addAll(printListFromTailToHead(listNode.next));res.add(listNode.val);}return res;}
package com.LeetCodeProblem;
import java.util.ArrayList;
import java.util.Stack;//利用栈先入后出的特性实现反转数据顺序public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {Stack<Integer> temp = new Stack<>();ArrayList<Integer> newList = new ArrayList<>();ListNode t = listNode;//这里不创建t,直接用listNode也行while( t != null ){temp.push(t.val);t = t.next;}while( !temp.empty() ){newList.add(temp.pop());}return newList;}public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}}}

JZ3 从头到尾打印链表相关推荐

  1. 《剑指offer》--二维数组中的查找、从头到尾打印链表、重建二叉树、旋转数组的最小数字

    一.二维数值中的查找: 1.题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数 ...

  2. 从头到尾打印链表c++_从头到尾创建一个C#应用程序-完整的24小时课程

    从头到尾打印链表c++ In this comprehensive, 24-hour-long course from Tim Corey, you will learn to use C# to b ...

  3. Java从头到尾打印链表

    Java从头到尾打印链表 /*** @author kegekeqi* @version 1.0* @date 2021-12-5 14:18*/ public class ListNode {int ...

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

    题目描述 输入一个链表,从尾到头打印链表每个节点的值. 解决办法: import java.util.ArrayList; public class Solution {public ArrayLis ...

  5. 剑指offer三从头到尾打印链表

    一.题目: 输入一个链表,从尾到头打印链表每个节点的值. 二.解题方法: 方法一:采用递归的方式实现 方法二:借助堆栈的"后进先出"实现 import java.util.Arra ...

  6. JZ56从头到尾打印链表

    题目来源从尾到头打印链表_牛客题霸_牛客网 描述 输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回). 如输入{1,2,3}的链表如下图: 返回一个数组为[3,2,1],0< ...

  7. 从头到尾打印链表(Java实现)

    问题描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解题思路 利用栈"先入后出"的特性. 代码实现: /** * public class ListNode ...

  8. 【剑指offer-Java版】05从尾到头打印链表

    从头到尾打印链表:递归实现比较简单 注意处理异常输入:如输入指针为空 处理边界条件等即可 public class _Q05 {public static void main(String[] arg ...

  9. 《剑指offer》刷题——【链表】从尾到头打印链表

    <剑指offer>刷题--[链表]-<从尾到头打印链表> 问题分析: 递归实现: 1. 无返回值 2. 有返回值(ArrayList) 问题分析: 从头到尾打印链表比较简单,那 ...

最新文章

  1. 如何正确刷题计算机考研,2020考研:4个方法教你数学如何正确刷题!
  2. FTPClient.listFiles() 放到linux上,返回值为null或数组长度为0
  3. jquery $.trim()方法使用介绍
  4. 《面向对象的思考过程(原书第4版)》一 第2章 如何以面向对象的方式进行思考...
  5. 如何让一个div里面的div垂直居中?
  6. html 读取 vb,VB编程:vb读取textbox控件某一行的方法
  7. github flow
  8. readonly和disabled的区别
  9. 管理信息系统第一次作业
  10. C语言入门经典(第5版)
  11. Mysql常用内置函数
  12. html360se,360浏览器发布SE版本
  13. 程序猿学习中华古诗词路径
  14. mysql mpm_mysql mpm
  15. 1024 程序员节|用代码,改变世界
  16. 液晶显示屏模组工艺流程是什么,液晶显示模组生产流程的意义
  17. 记录微机大作业-----流水灯
  18. js 正则表达式详解
  19. 静态网页项目部署到云服务器上
  20. springmvc+mybatis+easyui分页

热门文章

  1. Atcoder 834 A mod B Problem 神思路取模
  2. 面对压力,逃避还是面对?
  3. web前端开发基础教程一
  4. Google Earth Engine (GEE) ——Earth Engine Explorer (EE Explorer)使用最全解析(8000字长文)
  5. IBM Websphere MQ 使用详解
  6. Python字体成灰色有波浪号
  7. 10条必知的网页导航菜单设计原则
  8. [转]:职场不得不知的4大潜规则
  9. Homography estimation(旋转估计)
  10. [CVPR2021-oral]Learning to Aggregate and Personalize 3D Face from In-the-Wild Photo Collection