LeetCode反转链表的五种Java实现方式

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

方法一

创建一个新链表,遍历旧链表中的数据并将其放入新链表的头部。实现方式如下

class Solution {public ListNode reverseList(ListNode head) {//创建一个新链表,将旧链表的头部放入新链表头部ListNode o1 = null;ListNode p = head;while(p!=null){o1=new ListNode(p.val,o1);p= p.next;}return o1;}
}

方法二

构造一个新链表,从旧链表头部移除节点,添加到新链表头部。与方法一的区别在于,没有新创建节点。

class Solution {public ListNode reverseList(ListNode head) {//旧节点Link o1 = new Link(head); Link o2 = new Link(null);while(true){ListNode first = o1.removeFirst();if(first==null){break;}o2.addFirst(first);}return o2.head;}static class Link{private ListNode head;public Link(ListNode head){this.head = head;}//传入新链表public void addFirst(ListNode first){first.next=head;head=first;}public ListNode removeFirst(){ListNode first =head;if(first!=null){//说明还存在节点head = head.next;}return first;}}
}

方法三

采用递归思想,遍历到最后节点后,将最后一个节点指向上一个节点。

图示如下:

代码实现如下 

class Solution {public ListNode reverseList(ListNode head) {if(head == null||head.next == null){return head;}//list作为头节点ListNode list = reverseList(head.next);//将当前节点作为list的最后一个节点head.next.next = head;//取消掉旧链表中的连接关系head.next =null;return list;}
}

方法四

从链表每次拿到第二个节点,将其从链表断开,插入头部,直至它为 null 结束

图示如下

代码实现如下 

class Solution {public ListNode reverseList(ListNode head) {if(head==null || head.next==null){return head;}ListNode poniter = head.next;//用来充当头节点ListNode p = head;//不停的将第二个节点插入该链表的头部while(poniter!=null){//头节点指向第三个节点head.next = poniter.next;//第二个节点更改为头节点poniter.next = p;//将p指向当前链表的头部p = poniter;//pointer指向移动后原链表的第二个节点poniter = head.next;}return p;}
}

方法五

把链表分成两部分,思路就是不断从链表2的头,往链表1的头搬移

图示如下:

代码实现如下 

class Solution {public ListNode reverseList(ListNode head) {if(head == null){return head;}ListNode p = null;while(head!=null){//第二个节点ListNode pointer  = head.next;head.next = p;p = head;head = pointer;}return p;}
}

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

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

相关文章

14——1

这句话的意思是&#xff0c;如图中月份12天数23时&#xff0c;就是1223&#xff1b;当月份9天数2时&#xff0c;就是0902. 可以看到在上面给出的数组元素中&#xff0c;并没有连续挨在一起的2023数字元素——就有人可能输出答案0。 所以这里要看一下—— ——子序列的含义&…

AM驱动架构—优质Mini-LED显示技术解决方案

MiniLED背光驱动方案作为一种新兴的显示技术方案&#xff0c;具有更高的亮度、更广的色域范围和更低的功耗等优势&#xff1b;以其出色的性能和广泛的应用前景备受关注是实现MiniLED显示效果的重要环节。 MiniLED背光驱动方案是指通过控制MiniLED芯片的电流和亮度&#xff0c;…

JavaScript语法、语句、数据类型

一、JavaScript语法&#xff1a; 1、JavaScript字面量&#xff1a; JavaScript中的固定值称为字面量。数字字面量可以是整数、小数或者科学计数&#xff08;e&#xff09;,如3.1415926、1008、123e5等&#xff1b;字符串字面量可以使用单引号或者双引号&#xff0c;如“corli…

k8s的error: metrics not available yet问题处理

kubectl top node报错处理 解决步骤环境说明问题现象初次排查问题解决版本兼容性metric-server.yaml 问题验证 解决步骤 因项目要求&#xff0c;需在k8s集群中使用 kubectl top node命令&#xff0c;但是一直报error: metrics not available yet错误。为了更好的复现问题&…

【Mysql】查询mysql的版本

目录 cmd命令查询 mysql -- help(命令&#xff09; mysql -u root -p(命令&#xff09; 数据库管理工具查询 select version(); cmd命令查询 mysql -- help(命令&#xff09; mysql -u root -p(命令&#xff09; 执行该命令并且输入数据库密码 数据库管理工具查询 selec…

Python如何使用Pyecharts+TextRank生成词云图?

Python如何使用PyechartsTextRank生成词云图&#xff1f; 1 应用场景2 关于Pyecharts2.1 Pyecharts简介2.2 Pyecharts安装2.3 Pyecharts支持的图形2.4 Pyecharts的一个示例 3 关于TextRank3.1 TextRank简介3.2 TextRank安装 4 词云图的生成过程4.1 导入需要的包4.2 目标文件4.3…

Arthas应用诊断

一、介绍 rthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c…

『亚马逊云科技产品测评』活动征文|阿里云服务器亚马逊服务器综合评测

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 文章目录 引言一、亚马逊&阿里云发展历史介绍1.1 亚马逊发展历史1.2…

漏电继电器 LLJ-250HT AC220V 50-500ma 面板安装

系列型号&#xff1a; LLJ-10H(S)漏电继电器LLJ-15H(S)漏电继电器LLJ-16H(S)漏电继电器 LLJ-25H(S)漏电继电器LLJ-30H(S)漏电继电器LLJ-32H(S)漏电继电器 LLJ-60H(S)漏电继电器LLJ-63H(S)漏电继电器LLJ-80H(S)漏电继电器 LLJ-100H(S)漏电继电器LLJ-120H(S)漏电继电器LLJ-125H(…

ArcGIS:如何迭代Shp文件所有要素并分别导出为Shp文件?

01 前言 尝试用IDL实现&#xff0c;奈何又涉及新的类IDLffShape&#xff0c;觉得实在没有必要学习的必要&#xff0c;毕竟不是搞开发&#xff0c;只是做做数据处理&#xff0c;没必要拿IDL不擅长的且底层的东西自己造轮子。 这里想到使用Python去解决&#xff0c;gdal太久没用…

Ubuntu中安装R语言环境并在jupyter kernel里面增加R kernel

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

基于JavaWeb+SpringBoot+Vue电子商城微信小程序系统的设计和实现

基于JavaWebSpringBootVue电子商城微信小程序系统的设计和实现 源码获取入口前言系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 身处互联网时代&#xff0c;互联网无形中影响着人们的吃穿住行&#xff0c;人们享受着不…