【刷题之路】LeetCode 206. 反转链表

news2024/11/16 9:41:25

【刷题之路】LeetCode 206. 反转链表

  • 一、题目描述
  • 二、解题
    • 1、方法1——改变指针方向
      • 1.1、思路分析
      • 1.2、代码实现
    • 2、方法2——头插到新链表
      • 2.1、思路分析
      • 2.2、代码实现

一、题目描述

原题连接: 206. 反转链表
题目描述:
给你单链表的头节点 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

二、解题

1、方法1——改变指针方向

1.1、思路分析

因为链表的节点在内存中的地址是随机的,它们之间的联系方式只是通过一个next指针来联系:
在这里插入图片描述
所以我们其实只需要将各个节点之间的指针的方向反转过来,然后再将第一节点的next置为NULL将最后一个节点当做新的头节点即可:
在这里插入图片描述
而因为单链表的局限性,我们想要完成翻转就必须使用三个指针,pre、cur、next辅助反转,如下图所示:
在这里插入图片描述
只有这样我们才能做到在翻转cur的next方向时候,既能找到cur的前一个节点,也能保证在反转之后找到cur的下一个节点:
在这里插入图片描述
翻转完一个节点后,我们就让pre = cur,cur = next,next = next->next,就这样一直迭代地往后走就行了:
在这里插入图片描述
对后当cur为NULL时,就说明了我们已经把链表中所有的节点的指针方向全都反转过来了,所以结束条件就是cur为NULL:
在这里插入图片描述
所以我们之后返回pre作为新的头节点即可。

1.2、代码实现

有了以上思路,那我们写起代码来也就水到渠成了:

struct ListNode* reverseList(struct ListNode* head){
    if (NULL == head) {
        return NULL;
    }    
    struct ListNode *Pre = NULL;
    struct ListNode *Cur = head;
    struct ListNode *Next = head->next;
    
    while (Cur) {
        // 翻转
        Cur->next = Pre;

        // 迭代
        Pre = Cur;
        Cur = Next;
        if (Next) {
            Next = Next->next;
        }
    }
    return Pre;
}

时间复杂度:O(n),n为链表的长度。
空间复杂度:O(1),我们只需要用到常数级的额外空间。

2、方法2——头插到新链表

2.1、思路分析

还有一个更简洁的方式就是将原链表中的节点按顺序头插到一个新的链表中,这样当我们头插完所有的节点得到的新链表也就是翻转完成后的链表:
在这里插入图片描述
同样的,我们还是需要两个指针cur和next来帮我们完成头插,在每次将cur头插到新链表之前,先让next保存cur的下一个节点:
在这里插入图片描述
最后我们返回新的头指针newhead即可。

2.2、代码实现

有了以上思路,那我们写起代码来也就水到渠成了

 struct ListNode* reverseList(struct ListNode* head) {
     struct ListNode* Cur = head;
     struct ListNode* newhead = NULL; // 新的头指针
     struct ListNode* Next = NULL; // 保存cur的下一个节点,以辅助头插
     while (Cur) {
         Next = Cur->next;
         // 头插
         Cur->next = newhead;
         newhead = Cur;

         // 迭代往后走
         Cur = Next;
     }
     return newhead;
 }

时间复杂度:O(n),n为链表的长度。
空间复杂度:O(1),我们只需要用到常数级的额外空间。

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

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

相关文章

4月26号软件更新资讯合集....

Tpflow V7.0.2&#xff0c;PHP 工作流引擎新版发布 ​欢迎使用 Tpflow V7.0.1 工作流引擎 TpFlow 工作流引擎是一套规范化的流程管理系统&#xff0c;基于业务而驱动系统生命力的一套引擎。彻底释放整个信息管理系统的的活力&#xff0c;让系统更具可用性&#xff0c;智能应用型…

设计模式天花板,详解23种设计模式+7大设计原则

这份文档完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起&#xff0c;包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等&#xff0c;让读者能系统、完整、准确地掌握每个模式&#xff0c;培养正确的“设计观”;中高级内容则深…

速速报名| 米尔将精彩亮相2023 STM32中国峰会暨粉丝狂欢节

STM32峰会已成功举办五届&#xff0c;第六届将于今年5月12日-13日在深圳重磅回归&#xff01;往年&#xff0c;米尔电子都作为官方合作伙伴&#xff0c;出席演讲并展出公司配套的核心板和开发板。 今年&#xff0c;STM32峰会更是集齐了值得你「点赞、收藏、转发」的一键三连精…

漫画 | Linux之父:财务自由以后,我失眠了!

前言&#xff1a;今年是Linux诞生的30周年&#xff01; 1991年的8月&#xff0c; Linus在新闻组中公布了他正在开发的一个免费的操作系统&#xff0c;这也是以后风靡世界的Linux操作系统的雏形。 今天翻到这篇漫画&#xff0c;看到Linux的诞生过程&#xff0c;很是感慨&#x…

FPGA实现10G万兆网UDP通信 10G Ethernet Subsystem替代网络PHY芯片 提供工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、详细设计方案传统 FPGA UDP 方案本 FPGA 10G UDP 方案(牛逼)10G Ethernet 框图10G Ethernet 发送解析10G Ethernet 接收解析10G Ethernet 寄存器配置10G Ethernet UI 配置 4、vivado工程详解5、上板调试验证并演示ping功能测试数据收发测…

新手必看:蓝牙耳机什么牌子的好用?2023年蓝牙耳机排名

上班通勤、健身运动、游戏娱乐都离不开蓝牙耳机&#xff0c;蓝牙耳机市场这几年逐渐饱和&#xff0c;涌现了大量的品牌&#xff0c;蓝牙耳机什么牌子的好用成为热议话题&#xff0c;新手们在挑选时会参考排行榜&#xff0c;小编接下来将盘点2023年蓝牙耳机排名。 ●JEET Air 2蓝…

【服务器数据恢复】HP MSA存储raid5数据恢复案例

服务器故障环境&#xff1a; HP MSA某型号存储&#xff0c;8块SAS的硬盘组建RAID5磁盘阵列&#xff0c;其中包括1块热备盘。故障存储中基于该RAID组的LUN均分配给HP-Unix小机使用&#xff0c;上层做的LVM逻辑卷&#xff0c;存储的数据为Oracle数据库及OA服务端。 服务器故障&a…

PyCharm更换pip源、模块安装、PyCharm依赖包导入导出

一、Pycharm更换安装源 在下载安装好Pycharm后&#xff0c;一个在实际编程开发过程中非常重要的问题是第三方库添加&#xff0c;然而Python默认的源网络速度有点慢&#xff0c;因此&#xff0c;我们常常需要做的是更换Pycharm的安装源。 在当前最新版&#xff08;2022.03版&…

[排序算法]桶排序

参考&#xff1a;《漫画算法-小灰的算法之旅》 目录 一、什么是桶排序 二、桶排序的工作原理 三、代码 四、时间复杂度和空间复杂度 一、什么是桶排序 桶排序是一种线性时间的排序算法&#xff0c;它类似于基数排序所创建的统计数组。桶排序需要创建若干个桶来协助排序。 …

企业数字化管理中,数据治理到底怎么“治”

随着信息化、数字化的理念、技术及其应用在社会的方方面面进行扩散&#xff0c;数据的规模和丰富程度已经达到了一个新的高度&#xff0c;所以当下如何更进一步利用好数据&#xff0c;充分发挥数据的价值&#xff0c;将其真正变为高质量的数据资产成为了企业要面对的重要问题&a…

Matlab高光谱遥感、数据处理与混合像元分解及典型案例

站在学员的角度去理解“高光谱”&#xff0c;用大家能听的懂的语言去讲述高光谱的基本概念和理论&#xff0c;帮助学员深入理解这项技术的底层科学机理。方法篇&#xff0c;将高光谱技术与MATLAB工具结合起来&#xff0c;采用MATLAB丰富的工具箱&#xff0c;快速复现高光谱数据…

爱快 Docker NodeRed Tcp服务器远程连接试验

有一台基于4415软路由安装的ubuntu server系统&#xff0c;在Ubuntu上通过Docker安装了NodeRed。ubuntu通过爱快硬路由与外网连接。爱快硬路由通过动态域名和端口映射实现远程访问ubuntu。 平时通过如下命令运行NodeRed镜像&#xff1a; docker run -it --rm -e TZ"Asia/…

掌握这些Revit常见术语,从此BIM建模再无压力

BIM模型看似复杂&#xff0c;其实只要掌握模型中基本元素的概念&#xff0c;理清建模原理&#xff0c;就能轻松上手&#xff0c;游刃有余。 首先&#xff0c;我们要清楚&#xff0c;作为BIM主要建模软件的Revit&#xff0c;可以在三维空间中建立起数字化的建筑信息模型&#xf…

【更新公告】AirtestIDE更新至1.2.15版本

1. 前言 本次更新为AirtestIDE、Airtest、Poco、iOS-tagent更新。 AirtestIDE更新至1.2.15版本&#xff0c;Airtest更新为1.2.10版本&#xff0c;Poco更新为1.0.89版本&#xff0c;iOS-tagent重新梳理了master分支内容。更新内容详见下文。 2. 更新内容 1&#xff09;Airte…

HBase之全文检索Phoenix

HBase高手之路6-HBase之全文检索Phoenix 一、全文检索 ​ 二、全文检索工具phoenix简介 三、OLTP和OLAP 1. OLAP 在线分析处理系统&#xff0c;hadoop、hbase、hive提供支持 2. OLTP 在线事务处理系统&#xff0c;传统的关系数据库支持 四、Phoenix的安装 1. 下载 2.…

企业数字化转型的核心是什么?如何才能真正做到数字化转型?

什么是数字化转型&#xff1f;如何才能做到数字化转型&#xff1f; 好像大家一直在讨论&#xff0c;但仍然没有一个明确的答案。 这其实很正常: 因为“数字化”一词对不同的企业来说有不同含义。它可以是从采用新技术——引入自动化操作中的任何一样东西。此外&#xff0c;“…

《一次性分割一切》阅读笔记

目录 0 体验 1 摘要 2 十个问题 参考文献 0 体验 体验地址&#xff1a;SEEM - a Hugging Face Space by xdecoder 体验结果&#xff1a; 将哈士奇和汽车人从图片中分割出来。 1 摘要 尽管对于交互式人工智能系统的需求不断增长&#xff0c;但在视觉理解&#xff08;例如…

HCIP之RSTP、MSTP

目录 RSTP 相较于802.1D改进 改进1&#xff1a;变更了端口角色 改进点2&#xff1a;修改了端口的状态类型 改进3&#xff1a;对配置BPDU的报文内容进行修改 改进点4&#xff1a;对配置BPDU的处理 改进点5&#xff1a;快速收敛机制 改进点6&#xff1a;拓扑变更机制的改进…

用户画像系列——HBase 在画像标签过期策略中的应用

一、背景 前面系列文章介绍了用户画像的概念、用户画像的标签加工、用户画像的应用。本篇文章主要介绍一些画像的技术细节&#xff0c;让大家更加详细的了解画像数据存储和处理的逻辑 举个现实中的例子&#xff1a; 例子1&#xff1a;因为疫情原因&#xff0c;上线一个平台(…

使用chatgpt探索XSS问题

首先问的问题是&#xff1a;XSS的类型有哪些&#xff1f;如何有效地预防&#xff1f; 回答的结果来看&#xff0c;还是比较中规中矩的。 紧接着&#xff0c;第二个问题&#xff1a;“XSS的三种类型的区别是什么&#xff1f;” 只是从形成原理上分析了不同&#xff0c;但是&…