【每日一道LeetCode】LeetCode24:两两交换链表中的节点

每日一练:LeeCode-24. 两两交换链表中的节点 【链表+虚拟头结点】 LeeCode-19. 删除链表的倒数第 N 个结点【链表+虚拟头结点+双指针(快慢)】 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 阅读详情

题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题。


👍交换链表基本知识:

首先我们要清晰地知道,在交换链表结点位置时,只需要控制该节点前后结点的next指向正确的位置即可。例如:我想要交换结点2和结点3的位置,我需要的步骤:

①结点2的next指向结点4;

②结点3的next指向结点2;

③使得结点1的next指向结点3;

注意的是:如果先执行步骤③容易出错,原因是当前指针(cur)指向的是结点1,如果结点1的next先指向结点3,则cur.next不再是结点2,因为要操作该结点必须找到该节点的前一个结点,所以不可以先执行步骤③。

若要先执行步骤③,则需要另外定义一个临时结点temp来存储结点2。


👍解题思路:

方法一:我们要创建一个虚拟头节点(dummyHead),有利于操作head结点;创建一个firstNode的临时结点,来保存要交换的两个结点之间的第一个结点;创建一个secondNode的临时结点,来保存要交换的两个结点之间的第二个结点;创建temp结点,来保存两个结点后面的结点。

public ListNode swapPairs(ListNode head) {
            ListNode dummyHead = new ListNode(-1);  //虚拟头节点
            dummyHead.next=head;    //把虚拟头节点指向head结点
            ListNode cur =dummyHead;    
            ListNode temp;
            ListNode firstNode;
            ListNode secondNode;

            while (cur.next!=null && cur.next.next!=null){
                temp=cur.next.next.next;
                firstNode=cur.next;  //对第一个结点赋值
                secondNode=cur.next.next;  //对第二个节点进行赋值
                //进行交换操作
                cur.next=secondNode;
                secondNode.next=firstNode;
                firstNode.next=temp;
                cur=firstNode;
            }
            return dummyHead.next;
        }

图解如下:


方法二:使用递归方法。

使用递归方法是先交换结点3和结点4,最后再交换结点1和结点2。

public ListNode swapPairs1(ListNode head) {
        if (head==null || head.next==null){
            return head;  //如果该结点为null则返回该节点。
        }

        ListNode next=head.next;
        //进行递归
        ListNode newNode=swapPairs(next.next);  //把当前head结点的next的next结点作为head结点参数递归调用交换方法。
        //进行交换
        next.next=head;
        head.next=newNode;
        return next;
    }

LeetCode 每日一题 #24:两两交换链表中的节点|Python 迭代与递归双解法 几年前我准备求职时,也曾一头扎进 LeetCode 的题海。从最初的“看题懵圈”到后来能在面试中从容写出最优解,成了我提升算法能力最有效的方式。那段经历不仅帮我顺利拿到心仪 offer,更让我养成了系统思考和高效编码的习惯。如今工作稳定了,终于有时间把当年的刷题笔记重新整理、优化,并用逐题讲解清楚。希望能帮助正在准备面试、转行或想夯实基础的你——。:链表、指针操作、两两交换、虚拟头节点、递归:中等:⭐⭐⭐⭐☆(高频链表面试题,考察指针控制能力) 阅读详情

相关推荐

告别手动调参!PSCAD 4.2的Multiple-Run功能,5分钟搞定交流故障批量仿真

本文详细介绍了PSCAD 4.2的Multiple-Run功能如何高效处理交流故障批量仿真,告别传统手动调参的低效模式。通过五步配置法,工程师可在5分钟内完成数百次参数组合的仿真,显著提升电力系统分析效率。文章还包含工业级应用案例和高级调试技巧,助力实现故障仿真的自动化与智能化。

weixin_42552716的博客 274

每日一道leetcode题 24.两两交换链表中的节点(链表)

题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 解题思路 1. 迭代 我们要交换的一对链表分为两部分,奇数节点为一部分,偶数节点为另一部分。A 指的是这一部分交换节点中的前面的节点,B ...

Quentinmen的博客 257

camera——HAL层知识分享

CameraHAL层是Android相机系统的核心中间层,负责连接Framework层与硬件驱动层。它通过标准化接口解耦软硬件,实现跨平台兼容性,同时为厂商提供硬件定制空间。主要功能包括:设备管理、数据流处理、参数控制以及图像优化。关键子系统涵盖预览、拍照、录像、对焦与曝光等模块,采用HAL3的"请求-响应"模型实现精细控制。性能优化重点关注启动时间、帧率稳定性和延迟控制。通过分层架构设计(接口层-核心层-适配层)和缓冲池机制,确保高效数据传输和硬件资源调度。

2302_77429403的博客 2067

【每日算法】24. 两两交换链表中的节点

本文探讨了LeetCode 24题"两两交换链表节点"的两种解法。迭代法通过虚拟头节点和三个指针完成交换,时间复杂度O(n),空间O(1),适合生产环境;递归法代码简洁但空间复杂度O(n),适合学习递归思想。两种方法都体现了链表操作的核心技巧,如虚拟头节点、多指针控制和分治思想。这些算法在前端开发中的DOM重排、数据流处理和状态管理等场景有实际应用价值,能帮助开发者从功能实现者成长为系统设计者。

LYFlied的博客 2415

Linux ELF文件解析:从file到readelf的完整工具链指南

ELF(可执行与可链接格式)是Linux系统中二进制文件的标准格式,定义了程序加载、内存布局和元数据组织方式。其核心原理在于通过程序头表描述执行视图、节区头表描述链接视图,实现代码与数据的结构化存储。这一格式的技术价值在于为程序调试、安全审计和性能优化提供了底层支持,尤其在动态链接、符号解析和内存保护机制中发挥关键作用。在应用场景上,系统管理员依赖ELF分析工具解决库依赖问题,安全研究员通过检查安全属性评估漏洞风险,开发者则利用反汇编进行代码调试。本文聚焦于file、readelf、objdump等工具链的

weixin_42691065的博客 634

AD服务器搭建

一、角色安装1)打开服务器管理器,添加 角色和功能;2) 点 下一步;3)点 下一步;4)点 下一步;5)点击安装;6-1)将此服务器提升为域控制器;6-2)点下一步;6)输入密码 点 下一步;7)自动生成LIXF,点击下一步;8)确认目录,点下一步;8)确认安装条件,点安装; 8)安装成功,点关闭;...

潇峰的博客 6439

两两交换链表中的节点(每日一刷LeetCode)

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。‌循环条件错误‌:原始代码的循环条件是检查当前节点的后第三个节点是否存在,导致在处理最后两个节点时提前终止循环。‌未移动指针‌:交换节点后,未正确移动指针到下一组节点的前驱位置,导致无限循环或遗漏节点。‌正确移动指针‌:每次交换完两个节点后,将指针移动到交换后的第二个节点,以便处理后续节点。‌修正循环条件‌:只要当前节点的后面存在两个节点,就进行交换。两两交换链表中的节点。

m0_73322867的博客 5270

海康威视摄像头CVE-2017-7921漏洞复现:从零到一的实战指南(含解密工具下载)

本文详细解析了海康威视摄像头CVE-2017-7921漏洞的技术原理与复现方法,提供从环境搭建到实战利用的完整指南。通过认证绕过漏洞,攻击者可获取敏感信息并执行高权限操作,文章还包含解密工具下载与防御建议,助力安全研究人员深入理解物联网设备安全风险。

weixin_29325515的博客 800

每日一题:Leetcode-24 两两交换链表中的节点

力扣题目解题思路java代码。

LIUCHANGSHUO的博客 962

西门子SMART PLC增量式PID(完整梯形图FC)

西门子PLC自带的PID指令是基于位置型的PID,位置型PID的算法公式和详细介绍,大家可以参看《PID专栏》的其它文章,这里不再赘述。本篇博文直接给出代码部分的讲解,不设计太多公式和理论的推导。限于本人能力,文中难免出现错误和不足之处,诚恳欢迎大家的批评和指正。同时感谢大家的订阅和关注。SMART200 PLC系统自带的PID指令解析,可以参看下面这篇文章:SMART PLC PID算法基本解析(附公式)_RXXW_Dor的博客-优快云博客_plc的pid算法在态运行中,控制器调节输出值,使偏差 (e

RXXW_Dor的博客 8145

DeepFashion 服装识别:基于 YOLOv10 的深度学习实现与 UI 界面开发

随着深度学习的发展,目标检测算法在服装识别任务中表现出色,特别是 YOLO(You Only Look Once)系列模型。服装识别(Fashion Recognition)是计算机视觉领域的重要任务,广泛应用于。已提供,可用于服装分类、款式识别、虚拟试衣等应用。训练服装识别模型,并开发。

YOLO 802

C++ 链表 模拟 递归 迭代 力扣 24. 两两交换链表中的节点 题解 每日一题

本文围绕力扣 24 题 “两两交换链表中的节点” 展开,该题作为面试高频题,能强化多指针操作、递归与迭代转换及边界处理能力。文章详解两种解法:递归法通过拆解子问题,先处理后续链表再交换当前节点,明确终止条件与结果连接逻辑;迭代法借助虚拟头节点和多指针,循环处理每组节点交换,重点规避空指针问题。还分析了两种解法的时间与空间复杂度,总结核心技巧与面试注意事项,帮助读者扎实掌握链表操作,为解决复杂链表问题奠定基础。

Q741_147的博客 1020

【即插即用模块】注意力篇 | TGRS 2025 | SCPP:独家复现!三特征多尺度注意力融合,涨点必备!

摘要:SCPP(Scale-aware Pyramid Pooling)是一种创新的多尺度特征融合模块,专为U型网络瓶颈设计。它通过局部特征提取(1×1卷积)、多尺度膨胀卷积(1/3/5膨胀率分支)和全局特征聚合(全局平均池化)三重结构,结合SE通道注意力机制和自适应加权融合,显著提升特征表达能力。实验表明,SCPP能有效解决边缘模糊和错误检测问题,在遥感图像分割等任务中表现优异。该模块支持即插即用,适用于各类需要多尺度特征增强的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 939

【每日一题】两两交换链表中的节点

🌟个人博客:www.hellocode.top🌟 ⭐所有文章均在上方博客首发,其他平台同步更新 🔥本文专栏:《每日一题》 ⚡如有问题,欢迎指正,一起学习~~ 文章部分参考《代码随想录》,如有侵权,请联系删除~~ 时间:2022-05-16 题目序号:24 难度:中等 问题描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 来源:力扣(LeetCode) 示例1 输入:head = [1,2,3,4] 输出.

HelloCode 288

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

leetcode24_yiduobo的每日leetcode 24.两两交换链表中的节点

祖传的手艺不想丢了,所以按顺序写一个leetcode的题解。计划每日两题,争取不卡题吧。24.两两交换链表中的节点https://leetcode-cn.com/problems/swap-nodes-in-pairs/链表操作的题目,需要注意的是,交换两个节点的时候,一般是now - > node1 -> node2 -> right的形式,显然我们当前应该处于now,然后通过...

weixin_33268861的博客 92

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

(链表专题) 24. 两两交换链表中的节点 ——【Leetcode每日一题】

24. 两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

weixin_43412762的博客 516

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

每日LeetCode一道题————两两交换链表中的节点

每日一题 题目说明 24.两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:head = [1, 2, 3, 4] 输出:[2, 1, 4, 3] 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:head = [1] 输出:[1] 作者:LeetCode-Solution 链接:https://leetcode-cn.com/problems/swap-nodes-in-p

lsz20000813的博客 221

LeetCode 每日一练|第 24 题 两两交换链表中的节点

摘要: 本文针对LeetCode 24题(两两交换链表节点)提供详细题解。核心方法包括: 迭代法(推荐):通过虚拟头节点(dummy)统一处理边界,维护前驱指针(pre)和临时指针(cur、next),按固定三步顺序交换节点(防断链),时间复杂度O(n),空间O(1)。 递归法:将问题拆解为“前两节点+剩余子链表”,递归终止条件为节点数不足两个,代码简洁但空间复杂度O(n)。 易错点:未使用dummy导致头节点处理错误、交换顺序混乱、循环条件遗漏空指针检查。关键技巧:虚拟头节点简化逻辑、临时变量保存断链风险

2401_83564985的博客 436

leetcode每日一题: 24. 两两交换链表中的节点

leetcode每日一题: 24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:head = [1] 输出:[1] 提示: 链表中节点的数目在范围 [0, 100] 内 0 <= Node.val <= 100 通过次数179,015 提交次数263

weixin_43644559的博客 270

【LeetCode每日一题】19. 删除链表的倒数第 N 个结点 24. 两两交换链表中的节点

19. 删除链表的倒数第 N 个结点 24. 两两交换链表中的节点

2301_80103998的博客 824

Leetcode—24. 两两交换链表中的节点【中等】

运行结果 之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

Atticus的博客 474

【LeetCode每日一题】[中等]24. 两两交换链表中的节点

【LeetCode每日一题】[中等]24. 两两交换链表中的节点 24. 两两交换链表中的节点 题目来源 算法思想:链表 题目: 思路: 需要3个指针; 其中两个用来交换结点;如:[1,2]交换成[2,1],[3,4]交换成[4,3] 第三个用来连接结点,实现[2,1]与[3,4]的连接 java代码 class Solution { public ListNode swapPairs(ListNode head) { ListNode first = new ListNode(0);/

qq_39457586的博客 146

Leetcode 每日一题——24. 两两交换链表中的节点

24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 该问题是链表的常见问题,可以认为是一种特殊的删除和插入操作,C++的代码实现如下: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), ne

qq_41978896的博客 203

LeetCode-24. 两两交换链表中的节点(Golang)

LeetCode题号:24. 两两交换链表中的节点,带你用Golang解题

**My Coding Family** 534

每日算法Day02【移除链表元素、反转链表、两两交换链表中的节点、】

每日算法练习思路记录,力扣链表部分练习

2303_76696898的博客 819

每日一题(LeetCode)----链表--两两交换链表中的节点

如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。(1)我们以通过下标为奇数得到的链表的表头作为新链表的表头,然后用两个指针变量交叉遍历两个链表(交叉遍历就是一个链表向后遍历了一个节点之后就换另一个链表向后遍历一个节点,这样循环,直到两个链表都遍历完成结束)给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。如果当前操作节点的下一个和当前操作节点的下一个的下一个的下一个同时不为空,进行下面操作。

m0_73483024的博客 320
上一篇: 【JDBC】一篇文章帮你弄清楚Java程序如何连接数据库
下一篇: 【每日一道LeetCode】LeetCode19:删除链表的倒数第N个节点
BeingACoder
博客等级 码龄1年 106粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值