剑指Offer06. 从尾到头打印链表

# 06. 从尾到头打印链表

目录

  • # 06. 从尾到头打印链表
    • 题目
    • 代码(双指针法)
      • 代码逻辑
    • 递归法
      • 代码设计流程

题目

官方地址

在这里插入图片描述

代码(双指针法)

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public int[] reversePrint(ListNode head) {ListNode pre = null;ListNode cur = head;ListNode temp = null;int length = 0;// 确定链表的长度while (cur != null) {temp = cur.next;cur.next = pre;pre = cur;cur = temp;length++;}// 创建数组并存储翻转后的链表节点值int[] result = new int[length];int index = 0;while (pre != null) {result[index] = pre.val;pre = pre.next;index++;}return result;}
}

代码逻辑

  1. 首先,定义了一个单链表的节点类 ListNode,包含一个整数值 val 和一个指向下一个节点的指针 next
  2. reversePrint 函数接受一个头节点 head,表示待翻转的链表,并返回一个整数数组。
  3. 创建了三个指针变量 precurtemp,初始时 pretemp 都为 nullcur 指向头节点 head。这三个指针变量用于翻转链表的操作。
  4. 使用 while 循环遍历链表,直到当前节点 curnull。在每次循环中,先将 cur 的下一个节点保存到 temp 中,然后将 curnext 指针指向 pre,实现了当前节点的翻转。接着,将 pre 指针指向当前节点 curcur 指针指向下一个节点 temp,继续循环。
  5. 循环结束后,链表中的节点已完成翻转,pre 指向翻转后的新头节点,而 curnull
  6. 接下来,根据链表的长度创建一个数组 result,其长度为链表的长度 length
  7. 使用另一个指针 index 来遍历数组,初始值为 0。利用 while 循环,将翻转后的链表节点的值依次存储到数组中,同时将 pre 指针后移一位,直到 prenull
  8. 最后,返回存储了翻转后链表节点值的数组 result

在这里插入图片描述

递归法

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public int  length=0;public int[] reversePrint(ListNode head) {ListNode result = reverse(null, head);int ret[]=new int[length];int index=0;while(result!=null){ret[index]=result.val;result=result.next;index++;}return ret;}   private ListNode reverse(ListNode pre,ListNode cur){if(cur==null){return pre;}ListNode tmp=null;tmp=cur.next;// 先保存下一个节点cur.next=pre;// 反转length++;// 可以和双指针法的代码进行对比,如下递归的写法,其实就是做了这两步// pre = cur;// cur = temp;return  reverse(cur,tmp);}}

代码设计流程

  1. 定义了一个私有属性length,用于记录链表的长度。
  2. reversePrint方法接受一个链表的头节点head作为参数,并返回一个整型数组。
  3. reversePrint方法中,通过调用reverse方法将链表进行反转,将反转后的结果赋值给result。
  4. 创建一个长度为length的整型数组ret,用于存储反转后的节点值。
  5. 使用index变量作为索引,遍历result链表,将节点值依次存入ret数组中。
  6. 返回ret数组作为方法的输出。
  7. reverse方法是一个私有方法,用于实现链表的反转操作。
  8. reverse方法接受两个参数:pre代表当前节点的前一个节点,cur代表当前节点。
  9. 如果cur为null,说明已经遍历到链表末尾,直接返回pre作为反转后的链表头。
  10. reverse方法中,创建一个临时变量tmp,用于保存当前节点的下一个节点。
  11. 将当前节点的下一个节点指向pre,完成反转操作。
  12. 增加length的值,表示链表长度增加1。
  13. 递归调用reverse方法,将当前节点cur的下一个节点tmp作为新的当前节点,pre作为新的当前节点的前一个节点。
  14. 返回递归调用的结果,即反转后的链表头。

这段代码的功能是将给定链表进行反转,并将反转后的节点值存入一个数组中返回。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/79293.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机视觉 | Kaggle】飞机凝结轨迹识别 Baseline 分享和解读(含源代码)

文章目录 一、导读二、比赛背景三、比赛任务四、比赛数据五、评价指标六、Baseline6.1 Training part6.2 Submission part 一、导读 比赛名称:Google Research - Identify Contrails to Reduce Global Warming https://www.kaggle.com/competitions/google-researc…

【计算机网络】UDP协议

文章目录 1. UDP简介2. TCP和UDP的区别3. UDP的报文格式4. UDP的应用场景 1. UDP简介 UDP和TCP都是传输层协议,用于在计算机网络中发送和接收数据。数据可以是视频,可以是图片,可以是文字等.与TCP相比,UDP不提供数据传输的可靠性和流控制功能&#xff0…

8月16日起!亚马逊新商品上架需更新产品类型的274个属性!

亚马逊美国站发布公告称为了帮助买家更轻松地搜索产品,改善买家的购买决策提高卖家的销量,8月16日起受影响的200种产品类型的274个属性在上架前需更新属性,以下是公告内容: 自2023年8月16日起,200种产品类型的274个属…

18 | 基于DDD的微服务设计实例

为了更好地理解 DDD 的设计流程,这篇文章会用一个项目来带你了解 DDD 的战略设计和战术设计,走一遍从领域建模到微服务设计的全过程,一起掌握 DDD 的主要设计流程和关键点。 项目基本信息 项目的目标是实现在线请假和考勤管理。功能描述如下…

用于大型图像模型的 CNN 内核的最新内容

一、说明 由于OpenAI的ChatGPT的巨大成功引发了大语言模型的繁荣,许多人预见到大图像模型的下一个突破。在这个领域,可以提示视觉模型分析甚至生成图像和视频,其方式类似于我们目前提示 ChatGPT 的方式。 用于大型图像模型的最新深度学习方法…

轻松搭建酒店小程序

酒店小程序的制作并不需要编程经验,只需要按照以下步骤进行操作,就能很快地搭建自己的小程序商城。 第一步,注册登录账号进入操作后台,找到并点击【商城】中的【去管理】进入商城的后台管理页面,然后再点击【小程序商城…

vue实现文件下载

实现效果图&#xff1a;点击蓝色文字&#xff0c;下载文件 代码实现&#xff1a; <div v-for"(item, index) in form.fileList" :key"index"><i class"el-icon-upload" style"color: #c0c4cc; margin-right: 5px"></i&…

【嵌入式环境下linux内核及驱动学习笔记-(18)LCD驱动框架1-LCD控制原理】

目录 1、LCD显示系统介绍1.1 LCD显示基本原理1.1.1 颜色的显示原理&#xff1a;1.1.2 图像的构成 1.2 LCD接口介绍1.2.1 驱动接口 - MCU接口1.2.2 驱动接口 - RGB接口1.2.3 驱动接口 - LVDS接口1.2.4 驱动接口 - MIPI接口1.2.5 RGB / MIPI / LVDS三种接口方式的区别&#xff1a…

复习之selinux的管理

一、什么是selinux? SELinux&#xff0c;Security Enhanced Linux 的缩写&#xff0c;也就是安全强化的 Linux&#xff0c;是由美国国家安全局&#xff08;NSA&#xff09;联合其他安全机构&#xff08;比如 SCC 公司&#xff09;共同开发的&#xff0c;旨在增强传统 Linux 操…

基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章

今次介绍一个应用程序单例唯一运行方案的代码。 我们知道&#xff0c;有些应用程序在操作系统中需要单例唯一运行&#xff0c;因为程序多开的话会对程序运行效果有影响&#xff0c;最基本的例子就是打印机&#xff0c;只能运行一个实例。这里将笔者单例运行的代码共享出来&…

如果网站的 Cookie 特别多特别大,会发生什么(一)

有没有想过&#xff0c;如果网站的 Cookie 特别多特别大&#xff0c;会发生什么情况&#xff1f; 不多说&#xff0c;马上来试验一下&#xff1a; for (i 0; i < 20; i) document.cookie i X.repeat(2000) 什么&#xff0c;网站居然报错了&#xff1f; 众所周知&am…

elevation mapping学习笔记2之高程图输入、输出、服务和参数配置的定义和说明

文章目录 0 引言1 话题Topics1.1 订阅subscribe1.2 发布publish 2 服务Services3 参数Parameters 0 引言 elevation mapping学习笔记1已经成功编译安装elevation mapping高程图工程&#xff0c;并运行示例turtlesim3_waffle_demo&#xff0c;在仿真环境下&#xff0c;控制带有…

电脑技巧:七个非常神奇有趣的网站,值得收藏

目录 1、Airpano 2、AI创作家 3、The Useless Web 4、全球高清实况摄像头 5、MyFreeMP3 6、世界名画拼图 7、纪妖&#xff08;中国古今妖怪集&#xff09; 互联网是一个神奇的世界&#xff0c;存在着许多令人惊叹的网站&#xff0c;这里就给大家分享七个非常神奇有趣的网…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--功能实现[五]

文章目录 SSM--功能实现实现功能09-带条件查询分页显示列表需求分析/图解思路分析代码实现测试分页条件查询带条件分页查询显示效果 实现功能10-添加家居表单前端校验需求分析/图解思路分析代码实现完成测试测试页面效果 实现功能11-添加家居表单后端校验需求分析/图解思路分析…

关于Godot游戏引擎制作流水灯

先上核心代码 游戏节点 流水灯的通途可以是 1. 装饰 2. 音乐类多媒体程序&#xff08;如FL中TB-303的步进灯&#xff09; FL Studio Transistor Bass

基于Kubernetes环境的高扩展机器学习部署利器——KServe

随着ChatGPT的发布&#xff0c;人们越来越难以回避利用机器学习的相关技术。从消息应用程序上的文本预测到智能门铃上的面部识别&#xff0c;机器学习&#xff08;ML&#xff09;几乎可以在我们今天使用的每一项技术中找到。 如何将机器学习技术交付给消费者是企业在开发过程中…

【独立后台】快递小程序便宜寄快递系统小程序 对接易达

快递代发项目简介&#xff1a; 顾名思义就是帮发快递。原本产业链是客户-快递之间的联系&#xff0c;现在变成了客户-我们-快递&#xff0c;简单来说就是我们把客户聚集到一起团购到了更优惠的价格。很简单就是赚一个差价&#xff0c; 单子多就能和各个快递合作的平台&#x…

【Yolov5+Deepsort】训练自己的数据集(1)| 目标检测追踪 | 轨迹绘制

&#x1f4e2;前言&#xff1a;本篇是关于如何使用YoloV5Deepsort训练自己的数据集&#xff0c;从而实现目标检测与目标追踪&#xff0c;并绘制出物体的运动轨迹。本章讲解的为第一个内容&#xff1a;简单介绍YoloV5Deepsort中所用到的目标检测&#xff0c;追踪及sort&Depp…

基于Spring Boot的在线视频教育培训网站设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的在线视频教育培训网站设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java sp…

Python IDE

Python IDE 本文为大家推荐几款款不错的 Python IDE&#xff08;集成开发环境&#xff09;&#xff0c;比较推荐 PyCharm&#xff0c;当然你可以根据自己的喜好来选择适合自己的 Python IDE。 PyCharm PyCharm 是由 JetBrains 打造的一款 Python IDE。 PyCharm 具备一般 Pyt…