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.mfbz.cn/a/148936.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

简单理解路由重分发(用两路由器来理解)

相关命令&#xff1a; default-information originate //*重分发默认路由 redistribute rip subnets //*重分发rip redistribute ospf 1 metric 3 //*重分发ospf&#xff08;其中&#xff1a;1是ospf进程id 3是跳数&#xff09; redistribute sta…

2024年春季3月退役的大学生士兵免试专升本单独报名的新政策

关于2024年春季3月退役大学生士兵专升本免试单独报名安排的通知 2024年3月退役的符合条件的大学生士兵单独组织一次报名&#xff0c;网上报名时间另行通知&#xff0c;履行网上报名和信息确认手续&#xff0c;根据要求上传本人头像照片、身份证照片&#xff0c;以及《入伍通知书…

电机应用-控制系统、PID

控制系统 对生产中某些关键性参数进行自动控制&#xff0c;使它们在受到外界干扰&#xff08;扰动&#xff09;的影响而偏离正常状态时&#xff0c;能够被自动地调节而回到工艺所要求地数值范围内。 自动控制系统分为&#xff1a;开环、闭环。 闭环自动控制系统原理 闭环控制是…

threejs (四) 纹理 Texture

定义&#xff1a;纹理图片&#xff08;或canvas/video等&#xff09;映射到物体表面&#xff0c;或者作为反射、折射贴图&#xff0c;也就是物体的皮肤。 1、纹理贴图分类 map&#xff1a;颜色贴图&#xff0c;存储颜色信息bumpMap&#xff1a;凹凸贴图&#xff0c;性能贴图&…

翻牌器特效--vue3 封装组件

1.效果图 2.下面为封装好的代码&#xff0c;在页面中引入即可 html <template><div id"flip-container" v-if"flag false"><div id"digit-1"class"digit">0</div><div id"digit-2"class"…

算法笔记—第五章-最大公约数与最小公倍数

算法笔记-最大公约数与最小公倍数 最大公约数最小公倍数最大公约数 2最小公倍数2互质互质2 最大公约数 //最大公约数与最小公倍数#include <cstdio> int gcd(int a, int b) {if (b 0) //截止的条件{return a; }else {return gcd(b, a % b);//这里是a与b和b&#xff…

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

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

百望云斩获“新华信用金兰杯”ESG优秀案例 全面赋能企业绿色数字化

近年来&#xff0c;中国ESG蓬勃发展&#xff0c;在政策体系构建、ESG信披ESG投资和国际合作等方面都取得了阶段性成效&#xff0c;ESG生态不断完善。全社会对ESG的认识及实践也在不断深化&#xff0c;ESG实践者的队伍在不断发展壮大。 ESG作为识别企业高质量发展的重要指标&…

DevEco studio配置自己的虚拟环境

开始使用DevEco studio时使用的时华为预置的手机&#xff0c;通过网络访问&#xff0c;但是近期发现有两点问题 网络不稳定的时候机器很卡现在资源很难使用 DevEco提供了自定义环境的搭建&#xff0c;从而解决上面的问题 这里有几点问题需要硬盘至少10G空闲&#xff08;应该问题…

Docker Rootfs

一、rootfs 介绍 rootfs 是一个操作系统所包含的文件、配置和目录&#xff0c;并不包括操作系统内核。在 Linux 操作系统中&#xff0c;这两部分是分开存放的&#xff0c;操作系统只有在开机启动时才会加载指定版本的内核镜像。 实际上&#xff0c;同一台机器上的所有容器&am…

漏电继电器 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(…

Mysql修改事务隔离级别及与spring隔离级别关系

Mysql如何修改事务隔离级别 1.查询事务级别 1.1查询全局事务隔离级别 select global.tx_isolation; 1.2 查询当前会话事务隔离级别 select session.tx_isolation; 2.修改事务隔离级别 2.1 修改全局事务隔离级别 set global transaction isolation level read committed;…

合封芯片科普,合封技术的实用性

一、为什么合封技术起来了 都知道芯片已经成为生活的一部分&#xff0c;用户对电子产品有更多的功能要求&#xff0c;伴随需要的芯片和元器件越来越多&#xff0c;线路越来越复杂&#xff0c;pcb板的空间越来越少&#xff0c;开发难度增加等等&#xff0c;合封芯片其优势就显现…

汽配零件发FBA美国专线

随着电商的迅速发展&#xff0c;跨境电商平台如亚马逊的FBA(Fulfillment by Amazon)服务成为了许多商家选择的销售渠道。对于汽配零件行业来说&#xff0c;发FBA美国专线可以打开更广阔的市场&#xff0c;并且有望获得可观的发展前景。下面将从市场分析和前景两个方面来探讨汽配…

AI智能网关在工业物联网领域有哪些应用优势

随着工业物联网规模的持续扩大&#xff0c;对设备的监测和控制需求的增加&#xff0c;传统工业网关越来越难以满足工业物联网的发展步伐。 针对规模庞大、设备复杂、自动化智能化水平要求高的工业物联网应用&#xff0c;AI智能网关依托强劲处理器性能和内置多场景应用AI算法&am…

架构开发与优化咨询和实施服务

服务概述 得益于硬件平台算力的提升&#xff0c;汽车电子电气架构的集成度逐渐提高&#xff0c;从单体ECU、到功能域集成控制器、到区域集成控制器&#xff0c;多域融合成为了目前行业中软件工程的重要工作内容。同时&#xff0c;在传统控制器C代码开发的基础上&#xff0c;C、…

使用jedis连接虚拟机redis报错 Failed to connect to any host resolved for DNS name

问题描述&#xff1a; 导致该问题发生的原因可能是虚拟机没有开放6379端口。 解决方案&#xff1a; 首先检查redis.conf的bing配置是否被注释了&#xff0c;如果没有将其注释 第二步&#xff0c;将保护模式设置为no 第三步&#xff0c;接下来可以使用命令查看6379端口是否…

金属五要素微型气象仪科技小物大智慧

WX-WQX5S 天气是我们生活中不可忽视的一个因素。冷暖交替&#xff0c;阴晴不定&#xff0c;这款金属五要素微型气象仪&#xff0c;让你随时掌握天气变化&#xff0c;成为生活的智者。 一、外观设计 这款气象仪采用金属材质&#xff0c;不仅耐用&#xff0c;而且具有很高的美观…

《009.SpringBoot之汽车租赁系统》

《009.SpringBoot之汽车租赁系统》 项目简介 [1]本系统涉及到的技术主要如下&#xff1a; 推荐环境配置&#xff1a;DEA jdk1.8 Maven MySQL 前后端分离; 后台&#xff1a;SpringBootMybatisPlus; 前台&#xff1a;Layuivue; [2]功能模块展示&#xff1a; 前端门户 1.登录&a…

关于Java抽象类和接口的总结和一点个人的看法

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ ა 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶个人主页&am…