24. 两两交换链表中的节点

数据结构【八大排序 --9】 八大排序算法,下期cpp~ 阅读详情

描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
在这里插入图片描述
提示:
链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100

思路

按照博客:《从三道LeetCode例题总结递归套路,解决递归问题》的套路,总体思路如下图:
在这里插入图片描述
下面开始考虑递归套路的三个步骤:

  1. 递归出口:什么时候递归需要结束?当head结点是空或者head->next结点为空时,即没有结点或只有一个结点时。
  2. 返回值:返回值很明显,是交换完之后的链表,即next结点。
  3. 本级递归需要做什么:本级递归要做的是交换head和head的下一个结点,递归函数返回的值谁来接收呢?自然就是交换后的尾结点:head->next来接收。

解答:

为了避免和结点中的next指针混淆,这里的tmpNode结点就是上图中的next结点。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        if(head== nullptr || head->next == nullptr) return head;
        ListNode* tmpNode = head->next;
        head->next = swapPairs(head->next->next);
        tmpNode->next = head;
        return tmpNode;
    }
};
LeetCode24两两交换链表中的节点 算法特点及适用场景特点利用递归的方法实现链表节点的两两交换操作,代码结构简洁明了,逻辑清晰,符合链表这种通过指针依次访问节点的数据结构特点,易于理解和实现。它能够准确地按照要求将链表中相邻的两个节点进行两两交换,保证了链表结构在交换后的正确性。时间复杂度为 ,在处理链表节点两两交换问题上具有较好的效率表现,只要链表的节点数量在可接受范围内,都能快速地完成交换操作。适用场景。 阅读详情

相关推荐

LeetCode 24. 两两交换链表中的节点(C++)

题目: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 示例: 给定 1-&gt;2-&gt;3-&gt;4, 你应该返回 2-&gt;1-&gt;4-&gt;3. 说明: 你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 思路: 建立虚拟头结点(为了不对head进行特殊处理),按照如下示意图进行节点交换。 ...

my_clear_mind的博客 2744

LC-442-数组中重复的数据

问题描述: 给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。 你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。 解题思路: 不太懂,懂了来写 代码实现: 示例: 在这里插入输入: nums = [4,3,2,7,8,2,3,1] 输出:[2,3] 输入:nums = [1,1,2] 输出:[1] 输入:nums = [1] 输出:[]

weixin_47971713的博客 738

从封装到先进封装:一文讲透Chiplet、2.5D/3D堆叠与系统集成

封装是芯片产业链中连接硅片与电路板的桥梁,承担物理保护、电气连接、散热与机械支撑等核心任务。传统封装从DIP、QFP发展到BGA,通过提升引脚密度满足早期性能需求。随着摩尔定律放缓,单纯缩小晶体管尺寸难以为继,先进封装应运而生,其核心理念从“封装单颗芯片”转向“系统级高密度集成”。扇出型封装、2.5D硅中介层、3D堆叠、Chiplet和系统级封装等技术,通过微米级互连和垂直堆叠,大幅提升I/O密度与带宽,成为AI芯片、HBM存储、高性能计算等领域的关键支撑。本文梳理先进封装的技术演进、分层架构与工程难点,帮

weixin_29185167的博客 366

LeetCode 24. 两两交换链表中的节点

LeetCode 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. ===== /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : va

G4N3 152

【阿里云大模型高级工程师ACP习题集】2.1 用大模型构建新人答疑机器人

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 2606

Shopee商品详情页反爬实战:手把手逆向x-sap-Ri和x-sap-Sec请求头加密

本文详细解析了Shopee商品详情页反爬机制中x-sap-Ri和x-sap-Sec请求头参数的加密逻辑,通过JS逆向技术手把手教你定位加密入口、分析哈希算法与对称加密实现,并提供完整实战案例和应对反爬策略的高级技巧,助力开发者突破电商平台数据采集难点。

weixin_27875131的博客 1824

LeetCode 24 两两交换链表中的节点

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例:给定 1-&gt;2-&gt;3-&gt;4, 你应该返回 2-&gt;1-&gt;4-&gt;3.说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。/** * Definition for singly-linked list. * public class ListNode {...

Biu Biu Biu ~~~~~ 548

yolov5 FPGA实现及verilog代码仿真

本文介绍了一种基于FPGA的卷积神经网络加速器设计,采用混合架构实现网络功能。该系统将训练和图像预处理等复杂计算保留在PC端执行,仅将主干网络部署在FPGA上。由于片上资源限制,建议通过外接DDR存储扩展容量。文章提供了完整的Verilog HDL源码,包括卷积单元(convUnit)、卷积层(convLayerSingle)和处理单元(processingElement)等核心模块,均已通过仿真验证。该设计采用流水线结构,使用浮点运算单元实现卷积计算,支持32x32图像输入和5x5卷积核处理。系统架构图中

QQ_778132974的博客 575

Leetcode题解 0010期

(不知不觉连续刷Leetcode也有10天了,这种东西就得坚持,坚持才是胜利。想起以前刷OJ时的那段生活了。另外相比于一个人孤零零的刷题,我觉得和一群人(至少有两个)刷题会更有效率,这就和健身一个道理,找1~2个人,你不想去的时候他拉你,他不想去的时候你拉他,这样一点点扶持下去,就能养成习惯,并健好身体。所以这里也不用给自己多说,只需两个字:加油) 因为前面有几道题偷机耍滑了,所以在这里需要重新...

bright_silmarillion的专栏 370

国科大学习资料--计算机视觉--期末考试解析

国科大学习资料–计算机视觉(胡占义)–期末考试解析 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

无名何许人的博客 2464

Windows环境下QGIS完整编译指南(从环境搭建到问题解决)

本文详细介绍了在Windows 11系统下编译QGIS 3.40.12版本的完整流程。主要内容包括:前期准备工作(系统要求、工具清单)、环境搭建(Visual Studio 2026、OSGeo4W、Qt Creator的安装配置)、以及详细的CMake参数设置。特别强调了依赖管理的重要性,并提供了解决常见编译错误的方案。该指南适用于GIS二次开发、QGIS功能定制和源码学习等场景,通过OSGeo4W工具简化了复杂的依赖管理过程,确保编译过程的可重复性。

LuckyHanMo的博客 1333

LeetCode 24 两两交换链表中的节点

LeetCode 24 两两交换链表中的节点 题目链接 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:head = [1] 输出:[1] 用两个链表结点每次取两个指针调换位置即可,AC代码如下: 在这里插入代码片 ...

旺崽的博客 2578

13、基因相似性度量的相关性及特征选择研究

本文研究了基因相似性度量和特征选择在生物学中的应用,详细介绍了GO术语相似性度量的多种方法,包括语义度量和路径长度度量,并分析了不同方法在酵母和人类数据集上的表现。研究发现,Avg-sum方法和基于路径长度的度量在多数情况下效果较好。此外,通过晚期辐射毒性预测的案例研究,探讨了特征选择的重要性及可能面临的过拟合和噪声干扰问题,并提出了相应的解决策略。

js777的博客 127

【LeetCode】24. 两两交换链表中的节点

本文介绍了链表两两节点交换的三种解法:迭代法、递归法和优化迭代法。迭代法通过维护三个指针(prev、first、second)逐步交换相邻节点;递归法采用自底向上策略处理子问题;优化迭代法利用多重赋值简化代码。三种方法的时间复杂度均为O(n),空间复杂度分别为O(1)、O(n)和O(1)。关键点在于正确处理节点引用关系,确保链表不断裂,并注意边界条件如空链表或单节点情况。

qq_32019341的博客 1124

《Scratch图形化等级考试(1~4级)历届真题解析》专栏总目录

❤️ 专栏名称:《🌸 专栏介绍:中国电子学会《全国青少年软件编程等级考试》Scratch图形化等级考试(1~4级)历届真题解析。🚀 订阅专栏:原价 99.9,🔥 火爆订阅中 🔥,限时 19.9。订阅后可阅读专栏内所有文章,本专栏持续更新中,欢迎订阅!

人生就是一个不断学习的过程 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LeetCode24. 两两交换链表中的节点

LeetCode24两两交换链表中的节点(非递归法+递归法)

weixin_42307601的博客 767

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

LeetCode24-两两交换链表中的节点

LeetCode24-两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1-&gt;2-&gt;3-&gt;4, 你应该返回 2-&gt;1-&gt;4-&gt;3. 一、分析 创建一个额外的节点来保存下一个节点所指向的节点,这样就不会丢失节点 易错点1:直接使用头结点 return ...

lyd1995的博客 403

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【LeetCode: 24. 两两交换链表中的节点 + 链表】

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

Coder_ljw的博客 1371

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

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

LYFlied的博客 2415

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

''' leetcode 24 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 给定 1->2->3->4, 你应该返回 2->1->4->3. ''' # Definition for singly-linked list. class ListNode: ...

WYXHAHAHA123的博客 178

LeetCode-24-两两交换链表中的节点

LeetCode-24-两两交换链表中的节点 /*两两交换链表中的节点*/ #include<iostream> using namespace std; struct Node{ int val; Node *next; }; Node *create(Node *head,int n){//构建链表 int num; Node *tail = head; for (int...

jindayue的博客 211

递归-24.两两交换链表中的节点-力扣(LeetCode)

我们的重复子问题就是将链表两两交换,需要一个ListNode*的参数,由于需要返回新的头指针,所以返回值类型是ListNode*。所以题目提供的函数可以拿过来用。

black_bear_white的博客 1038

【链表】LeetCode #24 两两交换链表中的节点

题目链接: LeetCode #24 两两交换链表中的节点 题目描述: #24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 通过次数135,890 提交次数204,775 分析: 两两交换,如果是奇数,最后一位不动。 如:1,2,3,4,5 交换后的结果应为 2,1,4,3,5 方案如下: 因为

Code_Yilia的博客 203

力扣 24. 两两交换链表中的节点

本文仅仅简单讲解了《24. 两两交换链表中的节点》这一题目,对迭代法有了一定的了解

m0_51787573的博客 1365

LeetCode 24两两交换链表中的节点

LeetCode 24两两交换链表中的节点Easy 题目简述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 输入:1->2->3->4 输出:2->1->4->3 思路:迭代 画图理解 p -> a -> b -> c 创建虚拟头节点dummy,交换a、b节点的过程,首先将p的下一个指向b,其次a的下一个指向b的下一个,然后b的下一个指向a,最后将p的位置向

XBlog 245
上一篇: 从三道LeetCode例题总结递归套路,解决递归问题
下一篇: 226. 翻转二叉树
MegaBytes
博客等级 码龄8年 45粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值