LeetCode(3)-链表:反转

【五分钟力扣】206. 用python3实现链表反转 阅读详情

反转链表是链表的经典问题,往往思路很清晰,但是实现起来总是会出现一些小问题,这里记下一些经典的反转链表问题

 

 

目录

 

Leetcode 206.反转链表

Leetcode 92.反转链表II


 

Leetcode 206.反转链表

反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这道题的实现思路其实很清晰,就是不断地让后边节点指向前边节点,但是一定需要定义pre,cur,later这三个指针来实现:
先使用later来记录cur.next,然后使cur.next指向pre,之后在使pre移动到cur的位置,cur移动到later的位置,直到cur==null即停止,然后使head.next=null,再返回pre即可:

在这里插入图片描述

代码实现:

public ListNode reverseList(ListNode head) {
        if (head == null) return null;
        ListNode pre = head;
        ListNode cur = head.next;
        ListNode later = null;
        while (cur != null) {
            later = cur.next;
            cur.next = pre;
            pre = cur;
            cur = later;
        }
        head.next = null;
        return pre;
    }

递归版本:

public ListNode reverseList(ListNode head) {
        if (head == null) return null;
        ListNode pre = head;
        ListNode cur = head.next;
        ListNode res = helper(pre, cur);
        head.next = null;
        return res;
    }

    private ListNode helper(ListNode pre, ListNode cur) {
        //递归终止条件
        if (cur == null) return pre;
        //递归过程
        ListNode later = cur.next;
        cur.next = pre;
        return helper(cur, later);
    }

Leetcode 92.反转链表II

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

 

代码实现:

public ListNode reverseBetween(ListNode head, int m, int n) {
        // 先获取到m前面一个节点和n后一个节点
        ListNode counter = head, preM = null, laterN = null;
        int len = 0;
        while (counter != null) {
            len++;
            preM = (len == m - 1) ? counter : preM;
            laterN = (len == n + 1) ? counter : laterN;
            counter = counter.next;
        }
        // 获取m节(要考虑从头节点开始反转的情况)
        ListNode mNode = (preM == null) ? head : preM.next;
        // 反转m-n节点
        ListNode pre = mNode;
        ListNode cur = mNode.next;
        while (cur != laterN) {
            ListNode later = cur.next;
            cur.next = pre;
            pre = cur;
            cur = later;
        }
        // 此时pre节点就是n节点
        // 连接m节点和laterN节点
        mNode.next = laterN;
        // 如果不是从头节点开始反转的话,连接preM和n节点
        if (preM != null) {
            // 返回头节点
            preM.next = pre;
            return head;
        }
        // 返回n节点(是从头节点开始反转的)
        return pre;
    }

不定期更新, 未完持续…

深度解析:C# Modbus TCP协议解析与异常处理(工控上位机必备) 协议解析要精准:掌握MBAP头和PDU的结构,尤其是常用功能码的请求/响应格式,避免因字节处理错误导致通信失败;异常处理要全面:覆盖通信层、协议层、数据层的所有异常类型,针对工业场景制定重试、重连、滤波等策略;资源管理要规范:使用释放资源,采用连接池复用连接,避免端口泄露;工业场景要适配:结合工控现场的特点(网络波动、电磁干扰、设备忙),优化通信效率和数据处理逻辑。通过以上解析和策略,可确保C#上位机与工业设备的Modbus TCP通信具备高稳定性、高可靠性、高容错性,满足工控领域的严苛要求。 阅读详情

相关推荐

非华为电脑也能用上鸿蒙生态?手把手教你给Win10/Win11装上最新华为电脑管家(附移动应用引擎开启方法)

本文详细介绍了如何在非华为品牌的Windows 10/11电脑上安装华为电脑管家并启用移动应用引擎,实现鸿蒙生态的无缝协同体验。从BIOS设置到安装步骤,再到性能优化和常见问题解决,手把手教你解锁跨设备高效工作流。

weixin_42542669的博客 4289

FreeMarker 之快速入门Demo

开发环境freemaker版本2.3.23Eclipse Mars.2创建maven的jar工程在eclipse中new 一个maven project,填入如下的信息,创建工程,工程起名为freemakerdemo导入依赖在pom.xml中引入如下的依赖     <dependency>             <groupId>org.freemarker</gr...

Java持续实践 5297

幸狐RV1106开发板实战:5分钟搞定Yolo8模型部署(附避坑指南)

本文详细介绍了在幸狐RV1106开发板上快速部署YOLOv8模型的实战流程。通过RKNN-Toolkit2工具链,将ONNX模型转换为RV1106 NPU专用的RKNN格式,并完成交叉编译与上板运行。文章重点分享了环境搭建、模型转换的关键步骤以及常见的避坑指南,帮助开发者高效实现边缘AI目标检测应用。

weixin_28677451的博客 916

关于在freemarker模板中遍历数据模型List<JavaBean>的经验

本文采用简单的servlet作为后台处理数据的工具,前台使用freemarker的ftl模板作为输出工具,简单说明怎样将封装有实体类对象的List集合注入到ftl模板中并且成功的在遍历显示出来,之前在网上找了很多这方面的资料,但是都没有解决这个问题,所以自己就从头认真的研读的一番freemarker的API文档,阅读了相关的类和接口的功能说明,终于找到了突破口,在这里写出来供和我有相同经历的孩纸(

zhouzhiwengang的专栏 8576

CFD-POST中建立变量的方法

本文以测量文丘里管中全压为例阐述CFD_POST中建立变量的方式 点击进入CFD-POST界面的expressions栏中 2.与expression栏中空白处右键,new-输入新建的表达式名称 3. 在下方的空白栏中右键-varible选择需要的变量,并根据公式进行修改 4.点击进入varibles栏,空白处右击-new-输入变量名totalpressure,在下拉框中找到之前定义的totalpressure 完成后可以在varibles栏中看到新建的...

sidxi的博客 1万+

uniapp [全端兼容] - 实现连接蓝牙电子秤+监听数据转换并实时返回示例代码,uniApp实现BLE蓝牙连接多个电子秤设备、蓝牙通讯协议对接详细教程(全平台兼容H5、微信小程序、苹果安卓App)

uniapp连接蓝牙电子秤,uniapp如何连接电子秤蓝牙,蓝牙称重,实现监听数据转换并实时返回,多蓝牙,uni-app电子秤16进制蓝牙通讯协议对接,uniapp微信小程序蓝牙获取电子秤的值,uniapp蓝牙称重电子秤,蓝牙电子秤硬件,APP端连接蓝牙秤获取重量实时显示在页面上蓝牙秤,插件组件,蓝牙连接失败,uniapp安卓苹果ios连接蓝牙电子秤没反应,uniapp微信小程序 蓝牙低功耗连接发送数据监听接收,uni-app小程序蓝牙连接、读写数据全过程,uniapp连接蓝牙体脂秤,蓝牙搜索不到怎么办,如

🏆 前端领域优质创作者 1万+

FreeMarker简单入门,这篇就够了

文章目录FreeMarker简介FreeMarker优势FreeMarker入门项目结构新建启动类新建控制类FreeMarker文件启动测试FreeMarker常用语法if指令list指令遍历Map运算符空值处理内建函数 时间处理 FreeMarker简介 FreeMarker是免费的,基于Apache许可证2.0版本发布 基于模板 + 要改变的数据,并用来输出文本(HTML网页、电子邮件、配置文件、源代码等) Freemarker 模板语言是FTL文件编写的(Freemarker 文件后缀 .ftl)

清茶淡粥的博客 1220

YOLOv8改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合

一、本文介绍 本文记录的是基于U-Net V2的YOLOv8目标检测改进方法研究。本文利用U-Net V2替换YOLOv8的骨干网络,UNet V2通过其独特的语义和细节融合模块(SDI),能够为骨干网络提供更丰富的特征表示。并且其中的注意力模块可以使网络聚焦于图像中与任务相关的区域,增强对关键区域特征的提取,进而提高模型精度。本文配置了原论文中pvt_v2_b0、pvt_v2_b1、pvt_v2_b2、pvt_v2_b3、pvt_v2_b4和pvt_v2_b5六种模型,以满足不同的需求。 文章目录一、本文

Limiiiing的博客 1722

template.process(root, out)的用法(shiro项目中来的九)

假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请点击http://106.12.206.16:8080/qingruihappy/index.html 1 Writer out = new BufferedWriter(new OutputS...

weixin_33901926的博客 9038

手把手教你学PCIE(11.3)--pcie的认证和合规性测试

PCIe 设备的认证和合规性测试是确保设备正常工作和达到预期性能的关键步骤。通过使用 PCI-SIG 提供的测试工具和第三方测试工具,可以全面评估 PCIe 设备的物理层、链路层、事务层和互操作性,确保设备符合行业标准和规范。

MHD0815的博客 1360

解决此平台不支持虚拟化的 Intel VT-x/EPT故障问题

当我们在VMware Workstation虚拟机上【启用】虚拟系统(如:Windows10)所在的虚【拟机设置】【处理器】【虚拟化引擎】下面的【虚拟化 Intel VT-x/EPT 或AMD-V/RVI(V)】内容后,在启动虚拟系统时,虚拟系统无法启动,且弹出【此平台不支持虚拟化的 Intel VT-x/EPT。不使用虚拟化的 Intel VT-x/EPT,是否继续】窗口

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1万+

【力扣精选】3分钟拿下反转链表所有题型

用画图的方式带你轻松解决面试高频题 -- 反转链表

秋刀鱼与猫的博客 3181

PX4从放弃到精通(三):使用qt编译PX4

1 下载px4源码 2在Firmware所在目录下执行 mkdir Firmware-build cd Firmware-build cmake …/Firmware -G “CodeBlocks - Unix Makefiles” -DCONFIG=nuttx_px4_fmu-v5_default 第三步最后的px4_fmu-v5_default根据自己的情况修改 执行完后如图 打开QT 点击打开工程 选择源码的CmakeLists.txt文件 选择imported Kit 打开项目那一栏,构建目

超维空间科技的博客 1万+

Kimi LeetCode 92. 反转链表 II Python3实现

LeetCode 92「反转链表 II」:反转链表从位置left到right的节点,一趟遍历完成。

m0_37843156的博客 73

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

反转链表超简单!3步搞定力扣206题

到这里我们的反转链表就已经完成了 这里新的表头就是L1 L2就从原先的表头变为NULL这里完全就可以让L2作为我们循环结束的标志 只要L2为NULL就跳出循环。今天小编要跟大家一起学习的是力扣网站上第206道算法题 名字叫反转链表 小编会把自己的解题思路和作图过程一一给大家展示 希望对大家会有所帮助。L3的作用来了它的目的就是把L2->next的这个值先记住以防待会儿要改L2->next的地址时原先的值找不到了被覆盖了。现在我们就可以放心大胆的把L2->next的值传给L1了。

2401_88793012的博客 178

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LeetCode 92反转链表II Python3

原题:链接 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例: 解法一 其实刚开始看这道题也没啥特别的想法,直接开干就行了。但是有很多细节需要处理,导致代码修改了很久才通过。这里简单地捋一下吧。设第m个节点为start节点,在开始start后续节点的翻转操作之前,我们不仅要找到start节点并保存,还需保存start节点的前一个节点fro...

Key Board的博客 520

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Leetcode 初级算法:链表3.反转链表

反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 解题思路:利用双指针头插法来进行翻转,代码如下: ```cpp /** * Definition for singly-linked list. ...

weixin_45221477的博客 189

LeetCode 206 反转链表的理解与分析 Python3

原题链接:LeetCode 206 反转链表 反转一个单链表。 就直接按照进阶的要求自己吧。 解法一 迭代法+双指针 def reverseList(head): if not head: return None pre, cur = head, head.next while cur: # temp 为临时变量 用于保存下一个c...

Key Board的博客 324

力扣:92. 反转链表 II(Python3)

力扣:92. 反转链表 II(Python3)

欢迎光临 307

leetcode 反转链表 python3

反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def revers

ywangjiyl的博客 122

【算法】【单调栈、递归 + 反转链表、Python3】力扣2487. 从链表中移除节点

执行用时: 392 ms,击败 72.59% 的 Python3 用户消耗内存: 62.41 MB,击败 18.70% 的 Python3 用户。

未来就在脚下。 1086

力扣:206. 反转链表(Python3)

力扣:206. 反转链表(Python3)

欢迎光临 321

2022/3/1 力扣:反转链表和K个一组反转链表

1、题目:反转链表 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(in

zrllllll的博客 354

反转链表

题目说明 反转一个单链表。 示例 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-linked-...

qq_40307753的博客 228

【leetcode】【初级算法】【链表3】反转链表

反转链表:遍历和递归

qq_43520842的博客 308

leetcode算法学习(3)——反转链表:反转一个单链表

反转链表迭代思路代码递归思路代码 迭代 思路 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 中间变量temp存放原链表的next地址 (1)、old_head:1->2->3->4->5->NULL new_head:1->None (2)、old_head:2->3->4->5->NULL new_head:2->1->Non

qq_41230076的博客 346
上一篇: Kafka核心操作总结
下一篇: LeetCode(4)-链表:快慢指针
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值