力扣考研经典题 反转链表

核心思想

头插法: 不断的将cur指针所指向的节点放到头节点之前,然后头节点指向cur节点,因为最后返回的是head.next 。

解题思路

1.如果头节点是空的,或者是只有一个节点,只需要返回head节点即可。

if (head == null || head.next == null) return head;

2.定义一个cur节点,我们要做的就是不断的把cur节点头插到head节点。head.next置为空。我们只要在这个链表上操作。实际上就是断开成两条链表,cur指针在另一个链表上不断的遍历,而另一个就是我们要的head

ListNode cur = head.next;
head.next = null;

3.头插法操作,我们需要一个curNext来保存cur的下一个节点。因为cur一直要用来头插,而这时候就会断链 ,导致不知道cur的下一个节点在哪里,因此用一个指针来记录。

   while (cur != null) {
            ListNode curNext = cur.next;
            //需要记录cur节点的下一个节点,因为每次都是cur节点插到头节点前面
            //下次使用的时候必须能找到cur的下一个节点,因为curNext是下一次头插的节点
            cur.next = head;
            head = cur;
            //上述就是头插法
            cur = curNext;
        }

完整代码

 

class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null)
            return head;
        ListNode cur = head.next;
        head.next = null;
        //在这里需要断开头节点和后面的节点,然后进行头插法
        while (cur != null) {
            ListNode curNext = cur.next;
            //需要记录cur节点的下一个节点,因为每次都是cur节点插到头节点前面
            //下次使用的时候必须能找到cur的下一个节点,因为curNext是下一次头插的节点
            cur.next = head;
            head = cur;
            //上述就是头插法
            cur = curNext;
        }
        return head;
    }
}

图解

 

 

 

 

 

 

 

 

 

 

 

头插法的好处

  1. 不需要额外的空间存储反转后的链表,操作都在原链表上进行。
  2. 时间复杂度为O(n),只需要遍历链表一次。
  3. 代码实现相对简单,逻辑清晰,易于理解和实现。

 

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

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

相关文章

Vatee万腾平台:创新科技,驱动未来

在科技日新月异的今天,每一个创新的火花都可能成为推动社会进步的重要力量。Vatee万腾平台,作为科技创新领域的佼佼者,正以其卓越的技术实力、前瞻性的战略眼光和不懈的探索精神,驱动着未来的车轮滚滚向前。 Vatee万腾平台深知&am…

公有链、私有链与联盟链:区块链技术的多元化应用与比较

引言 区块链技术自2008年比特币白皮书发布以来,迅速发展成为一项具有颠覆性潜力的技术。区块链通过去中心化、不可篡改和透明的方式,提供了一种全新的数据存储和管理方式。起初,区块链主要应用于加密货币,如比特币和以太坊。然而&…

RUST 编程语言 绘制随机颜色图片 画圆形 画矩形 画直线

什么是Rust Rust是一种系统编程语言,旨在提供高性能和安全性。它是由Mozilla和其开发社区创建的开源语言,设计目标是在C的应用场景中提供一种现代、可靠和高效的选择。Rust的目标是成为一种通用编程语言,能够处理各种计算任务,包…

STM32-OC输出比较和PWM

本内容基于江协科技STM32视频内容,整理而得。 文章目录 1. OC输出比较和PWM1.1 OC输出比较1.2 PWM(脉冲宽度调制)1.3 输出比较通道(高级)1.4 输出比较通道(通用)1.5 输出比较模式1.6 PWM基本结…

数据库系统原理 | 查询作业2

整理自博主本科《数据库系统原理》专业课自己完成的实验课查询作业,以便各位学习数据库系统概论的小伙伴们参考、学习。 *文中若存在书写不合理的地方,欢迎各位斧正。 专业课本: ​ ​ ———— 本次实验使用到的图形化工具:Heidi…

ThreadPoolExecutor - 管理线程池的核心类

下面是使用给定的初始参数创建一个新的 ThreadPoolExecutor &#xff08;构造方法&#xff09;。 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,…

【SVN的使用-源代码管理工具-SVN介绍-服务器的搭建 Objective-C语言】

一、首先,我们来介绍一下源代码管理工具 1.源代码管理工具的起源 为什么会出现源代码管理工具,是为了解决源代码开发的过程中出现的很多问题: 1)无法后悔:把项目关了,无法Command + Z后悔, 2)版本备份:非空间、费时间、写的名称最后自己都忘了干什么的了, 3)版本…

中英双语介绍加拿大(Canada)

加拿大国家简介 中文版 加拿大简介 加拿大是位于北美洲北部的一个国家&#xff0c;以其广袤的土地、多样的文化和自然美景著称。以下是对加拿大的详细介绍&#xff0c;包括其地理位置、人口、经济、特色、高等教育、著名景点、国家历史和交通条件。 地理位置 加拿大是世界…

LeetCode 189.轮转数组 三段逆置 C写法

LeetCode 189.轮转数组 C写法 三段逆置 思路: 三段逆置方法:先逆置前n-k个 再逆置后k个 最后整体逆置 由示例1得&#xff0c;需要先逆置1,2,3,4 再逆置5,6,7&#xff0c;最后前n-k个与后k个逆置 代码 void reverse(int*num, int left, int right) //逆置函数 { while(left …

【工具】豆瓣自动回贴软件

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 相比于之前粗糙丑陋的黑命令框版本&#xff0c;这个版本新增了UI界面&#xff0c;从此可以不需要再挨个去翻配置文件了。 另外&#xff0c;升级了隐藏浏…

深入理解并发、线程与等待通知机制

目录 一、基础概念 进程和线程 进程 线程 Java 线程的无处不在 进程间的通信 进程间通信有几种方式&#xff1f; CPU 核心数和线程数的关系 上下文切换&#xff08;Context switch&#xff09; 并行和并发 二、认识 Java 里的线程 Java 程序天生就是多线程的 线程的…

使用Keil将STM32部分程序放在RAM中运行

手动分配RAM区域,新建.sct文件,定义RAM_CODE区域,并指定其正确的起始地址和大小。 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************…

鸿蒙应用笔记

安装就跳过了&#xff0c;一直点点就可以了 配置跳过&#xff0c;就自动下了点东西。 鸿蒙那个下载要12g个内存&#xff0c;大的有点吓人。 里面跟idea没区别 模拟器或者真机运行 真机要鸿蒙4.0&#xff0c;就可以实机调试 直接在手机里面跑&#xff0c;这个牛逼&#xf…

Centos新手问题——yum无法下载软件

起因&#xff1a;最近在学习centos7&#xff0c;在VM上成功安装后&#xff0c;用Secure进行远程登陆。然后准备下载一个C编译器&#xff0c;看网络上的教程&#xff0c;都是用yum来下载&#xff0c;于是我也输入了命令&#xff1a; yum -y install gcc* 本以为会自动下载&…

算法的空间复杂度(C语言)

1.空间复杂度的定义 算法在临时占用储存空间大小的量度&#xff08;就是完成这个算法所额外开辟的空间&#xff09;&#xff0c;空间复杂度也使用大O渐进表示法来表示 注&#xff1a; 函数在运行时所需要的栈空间(储存参数&#xff0c;局部变量&#xff0c;一些寄存器信息等)…

《C语言》预处理

文章目录 一、预定义符号二、#define定义常量三、#define定义宏四、宏更函数的对比五、#和##1、#运算符2、##运算符 一、预定义符号 C语言设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;在预处理期间进行处理的。 __FILE__//进行编译的源文件 __LINE__//文件当前的…

【Qt】Qt概述

目录 一. 什么是Qt 二. Qt的优势 三. Qt的应用场景 四. Qt行业发展方向 一. 什么是Qt Qt是一个跨平台的C图形用户界面应用程序框架&#xff0c;为应用程序开发者提供了建立艺术级图形界面所需的所有功能。 Qt是完全面向对象的&#xff0c;很容易扩展&#xff0c;同时Qt为开发…

自动控制:前馈控制

自动控制&#xff1a;前馈控制 前馈控制是一种在控制系统中通过预先计算和调整输入来应对已知扰动或变化的方法。相比于反馈控制&#xff0c;前馈控制能够更快速地响应系统的变化&#xff0c;因为它不依赖于系统输出的反馈信号。前馈控制的应用在工业过程中尤为广泛&#xff0…

Visual studio下使用 Wix 打包 C#/WPF 程序的中文安装包

Visual studio下使用 Wix 打包 C#/WPF 程序的中文安装包 1 下载并安装 Wix Toolset1.1 下载WIX Toolset1.2 安装1.3 配置系统环境变量path1.4 找不到 WiX 工具 candle.exe2 安装Visual studio 20202,并安装插件2.1 下载并安装 Visual Studio2.2 步骤二:安装 Wix v3 扩展插件3 …

人脸识别打卡系统一站式开发【基于Pyqt5的C/S架构】

人脸识别打卡系统 1、运用场景 课堂签到,上班打卡,进出门身份验证。 2、功能架构 人脸录入,打卡签到,声音提醒,打卡信息导出: 3、技术栈 python3.8,sqlite3,opencv,face_recognition,PyQt5,csv 第三方库: asgiref==3.8.1 click==8.1.7 colorama==0.4.6 co…