将链表反转

news2024/11/21 0:29:18

        反转链表在解决需要从尾节点开始遍历到头节点的地方很实用,是一种常用的解题技巧。在反转时,我们可以考虑从前向后反转和从后向前反转两种方式。

法一:递归

        每次将链表的头节点的下一个节点作为新的头节点,然后对剩余部分调用递归函数。这样递归调用会一直执行,直到到达链表的尾部,从链表的尾部开始,逆序地将节点连接起来。

public ListNode reverseList(ListNode head) {
    // 如果链表为空或只有一个节点,直接返回该链表,因为反转一个节点或空链表都是其本身
    if (head == null || head.next == null) {
        return head;
    }

    // 将链表的头节点的下一个节点作为新的头节点
    ListNode resetHead = head.next;

    // 对剩余部分调用递归函数,得到反转后的链表
    ListNode reversedReset = reverseList(resetHead);

    // 将原头节点的下一个节点指向头节点,形成反转后的链表
    resetHead.next = head;

    // 将原头节点的下一个节点指向 null,断开原头节点和反转后的链表的连接
    head.next = null;

    // 返回反转后的链表,即为新的头节点
    return reversedReset;
}

       该方法的时间复杂度是O(n),空间复杂度是O(n)。

法二:三指针

        在从前向后反转链表时,如果将某一节点的next指针指向它的前一个节点,那么余下尚未反转的部分就会因链表断开而丢失,所以为了保证不丢失,我们需要指针去记录它们。因此,需要三个指针,分别指向当前遍历到的节点,它的前一个节点和后一个节点。

    public ListNode reverseList(ListNode head) {
        // 初始化前一个节点为 null,当前节点为链表头
        ListNode prev = null;
        ListNode cur = head;

        // 遍历链表,直到当前节点为 null
        while (cur != null) {
            // 保存当前节点的下一个节点,以防失去链表连接
            ListNode next = cur.next;

            // 将当前节点的 next 指针指向前一个节点,实现反转操作
            cur.next = prev;

            // 更新 prev 为当前节点,cur 更新为下一个节点
            prev = cur;
            cur = next;
        }

        // 返回反转后链表的头节点
        return prev;
    }

        该方法的时间复杂度是O(n),空间复杂度是O(1)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云OSS对象存储

一、前言 阿里云对象存储OSS作用:用于存储图片、视屏、文件等数据。 参考阿里云文档地址:阿里云对象存储教程 二、总体思路 说明:客户端给服务端发送请求,获取policy和signature等数据(服务端提供)&#…

前端小案例——导航回顶部(HTML+CSS+JS, 附源码)

一、前言 实现功能: 这个案例实现了页面滚动到一定位置时显示"回到顶部"按钮,并且点击按钮能够平滑滚动回页面顶部的功能。 实现逻辑: 页面结构:通过HTML标签定义了页面的基本结构。页面主要由多个div.content组成&am…

MySQL-----初识

一 SQL的基本概述 基本概述 ▶SQL全称: Structured Query Language,是结构化查询语言,用于访问和处理数据库的标准的计算机语言。SQL语言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的关系数据库系统SystemR上实现。 ▶美国国家标…

如何解决 docker registry x509 证书不信任问题?

最近想尝试一下极狐GitLab(可以理解为 GitLab 在中国的发行版)内置的容器镜像仓库,这样就不用自己安装 Harbor 之类的了。于是找了个服务器安装了一个极狐GitLab 的私有化部署版本,安装过程可以参考过往的技术文章使用Omnibus 安装…

刨析数据结构(二)

🌈个人主页:小田爱学编程 🔥 系列专栏:数据结构————"带你无脑刨析" 🏆🏆关注博主,随时获取更多关于数据结构的优质内容!🏆🏆 😀欢迎…

Day06-Linux下目录命令讲解及重要文件讲解

Day06-Linux下目录命令讲解及重要文件讲解 1. Linux目录文件1.1 Linux系统目录结构介绍1.1.1 Linux与Windows目录结构对比 1.2 重要的Linux配置文件介绍1.2.1 /etc系统初始化及设置相关重要文件1.2.2 /usr目录的重要知识介绍------应用程序目录1.2.3 /var目录下的路径知识-----…

Qt|制作简单的不规则窗体

通常我们用到的对话框基本上都是规则的,在有些特殊情况下,也会使用到不规则窗口,那么该如何实现不规则窗体呢? 在MFC框架下很难实现,应该说是难的都想放弃,但是,Qt框架下提供了一个叫做setMask…

【JAVA】守护线程是什么?

🍎个人博客:个人主页 🏆个人专栏:JAVA ⛳️ 功不唐捐,玉汝于成 目录 正文 我的其他博客 正文 在计算机编程中,守护线程(daemon thread)是一种在程序运行时在后台提供服务的线程…

【正点原子STM32连载】 第四十七章 FATFS实验 摘自【正点原子】APM32E103最小系统板使用指南

1)实验平台:正点原子APM32E103最小系统板 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第四…

【模型微调】| 各类微调模型总结 P-Tuning,Prefix,P-tuning v2,LoRA

文章目录 1 微调背景1.1 Full fine-tuning 全参数微调(FFT)1.2 parameter-Efficient-fine-tuning 部分参数微调(PEFT) 2 提示词调整训练法2.1 P-Tuning2.2 Prefix2.3 P-Tuning v2 3 结构调整训练法3.1 Adapter tuning3.2 LoRA 微调…

【2024年美国大学生数学建模竞赛】F题非法的野生动物贸易 完整数据

小云更新了全网最全的F题数据 另外也为大家分享: 技术文档,包括问题分析、建立模型、求解结果等,配套有思路分析视频、代码讲解视频。美赛官方限制总页数为25页,我们的思路长度为35页以上。所有模型都有求解代码和指标&#xff0…

数字化转型:企业适应新常态的关键之举_光点科技

在全球商业环境不断演变和技术日新月异的背景下,数字化转型已经成为企业不可回避的课题。它不仅关乎企业的未来生存与发展,更是适应新常态、提升竞争力的关键之举。但是,数字化转型并非一夜之间可以完成的任务,它需要全面的策略规…

九、显卡性能参数、接口

1、显卡说明 显卡的好坏直接影响画面的流畅度,一般大型游戏都会有一些电脑的推荐配置,里面就会说到显卡。 显卡,也称为显示卡(Video Card),是个人计算机基础的组成部分之一,负责将计算机系统需要…

前缀和 差分

差分和前缀和都是算法里边比较重要的知识点,不过学习的难度并不高,这篇文章会讲解相关的内容。 1. 前缀和怎么玩 1)一维前缀和 在该数之前,包括该数的所有数之和,有点类似高中学的数列的前n项和Sn。 2)二维…

2024年美赛A题:资源可用性和性别比例 Resource Availability and Sex Ratios 思路模型代码解析

2024年美赛A题:资源可用性和性别比例 Resource Availability and Sex Ratios 思路模型代码解析 【点击最下方群名片,加入群聊,获取更多思路与代码哦~】 问题翻译 虽然一些动物物种存在于通常的雄性或雌性之外,但大多数物种在很大…

ncc匹配(二,补足旋转)

先看运行结果: 第一张图是基于形状匹配结果0.992,第二张是匹配结果的ncc结果,1 再看旋转后: 看到没,旋转后,基于形状匹配结果28度,0.517,根据匹配结果ncc结果是0.99 我们看到ncc以…

聊一聊Tomcat的架构和运行流程,尽量通俗易懂一点

1、Tomcat的架构 这里可以看出 A、一个Tomcat就是一个Server,一个Server下会有多个Service, B、Service只负责封装多个Connector和一个Container(Service本身不是容器,可以看做只是用来包装Connector和Container的壳&#xff0c…

户外没有电源和网络,但需要安装监控系统,怎么办?太阳能智能监控系统给你解决

近期有粉丝给小编求助:需要在没网没电的户外进行智能监控的安装,不知道如何解决。收到粉丝的问题,小编立刻联系了技术人员给出方案。针对野外、户外等场景只需使用太阳能供电模组4G摄像机视频监控EasyCVR平台智能分析网关V4的架构&#xff0c…

Leetcode—2950. 可整除子串的数量【中等】Plus(前缀和题型)

2024每日刷题(一零八) Leetcode—2950. 可整除子串的数量 算法思想 让 f ( c ) d , 其中 d 1 , 2 , . . . , 9 f(c) d, 其中d 1, 2, ..., 9 f(c)d,其中d1,2,...,9. // f(c1) f(c2) ... f(ck) / k avg // > f(c1) f(c2) ... f(ck) - …

spring中生成jwtToken字符串以及解析手写通用工具类

当前使用JWT&#xff0c;肯定得提前准备jwt相关的导入依赖。 <!-- 关于jwt 生成令牌--> <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jjwt.version}</version> </dependency…