【Leetcode每日一题】 递归 - 两两交换链表中的节点(难度⭐)(38)

news2024/11/20 10:22:36

1. 题目解析

题目链接:24. 两两交换链表中的节点

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。

2.算法原理

一、理解递归函数的含义

首先,我们需要明确递归函数的任务:给定一个链表,我们要对这个链表进行两两交换,然后返回交换后的链表的头节点。这就像是给链表做一个“翻转”的小魔术,每两个节点就会交换位置。

二、逐步拆解问题

  1. 处理后续链表
    在递归函数中,我们首先要做的是处理当前节点的下一个节点开始的链表。为什么要这么做呢?因为如果我们直接交换当前节点和下一个节点,那么当前节点之后的链表就可能会失去连接。所以,我们需要先确保后面的链表已经被正确地处理好了。
  2. 交换当前两个节点
    当我们处理完后面的链表后,就可以放心地交换当前节点和下一个节点了。这就像是在玩扑克牌,我们先处理好手中的一部分牌,然后再交换最上面的两张牌。
  3. 连接处理后的链表
    交换完当前两个节点后,我们需要将这两个节点与后面已经处理好的链表连接起来。这样,整个链表就被完整地连接起来了。

三、确定递归的出口

当然,递归函数不能一直递归下去,它需要一个出口。这个出口就是当链表为空或者只有一个节点时。因为在这两种情况下,我们都不需要进行交换操作,所以直接返回当前节点即可。

四、tips:画图理解链表操作

在处理链表问题时,一个非常好的习惯就是画图。通过画图,我们可以更直观地理解链表的结构和指针的操作。这样,即使问题再复杂,我们也能轻松应对。

3.代码编写

/**
 * 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;
        auto tmp = swapPairs(head->next->next);
        auto ret = head->next;
        head->next->next = head;
        head->next = tmp;
        return ret;
    }
};

The Last

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~ 

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

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

相关文章

Matlab|【免费】基于半不变量的概率潮流计算

目录 主要内容 部分代码 结果一览 下载链接 主要内容 该程序主要内容是基于半不变量法的概率潮流,包含蒙特卡洛模拟法、半不变量法+Gram-Charlier级数展开以及半不变量法Cornish-Fisher级数展开三种方法以及效果对比,模型考虑了…

【AIGC工具】图片转3d模型

一个在线可以将图片转成3d模型的工具网站 有图形化界面 直接上传图片即可 网站地址: https://huggingface.co/spaces/Zhengyi/CRM

一文读懂systemd

文章目录 背景知识为何而来替代了什么init的缺点 systemd的系统架构图systemd (PID 1):systemd-journald:systemd-logind:systemd-udevd:systemd-networkd:systemd-resolved:systemd-timedated: systemd包括了哪些systemctljournalctlloginctlhostnamectltimedatectllocalectlm…

ngnix安装配置

通过yum -y install nginx的方式,有时候会出现No package nginx available的报错。迟迟无法解决。此时要通过下载安装包的方式安装。 1、下载安装包:官方网址 2、解压缩: tar -xzvf nginx-1.23.4.tar.gz cd nginx-1.23.4.tar.gz 3、源码包…

.NET高级面试指南专题十九【 数据库设计-4范式】

数据库范式设计是关系数据库设计中的重要概念,旨在减少数据冗余和提高数据的一致性。 范式设计的目的是提高数据库的数据质量、一致性和可维护性。通过将数据结构化为不同的范式,可以降低数据冗余,减少数据更新异常,提高数据的可靠…

【赠书第20期】AI绘画与修图实战:Photoshop+Firefly从入门到精通

文章目录 前言 1 入门篇:初识Photoshop与Firefly 2 进阶篇:掌握Photoshop与Firefly的核心技巧 3 实战篇:运用Photoshop与Firefly进行创作 4 精通篇:提升创作水平,拓展应用领域 5 结语 6 推荐图书 7 粉丝福利 前…

nginx 基本使用、借助 nginx 和 mkcert 实现本地 https://localhost 测试。

CSDN 如何将资源设置为免费? 安装和基本使用 进入 nginx 官网 下载 Mainline version 版本 解压到一个你喜欢的位置,比如解压到 C: 目录 不管配不配置环境变量,对 nginx 的所有操作都应该在对应文件夹中 基本命令的使用: cd …

C#装箱和拆箱

一,装箱 装箱是指将值类型转化为引用类型。 代码如下: 装箱的内部过程 当值类型需要被装箱为引用类型时,CLR(Common Language Runtime)会为值类型分配内存,在堆上创建一个新的对象。值类型的数据会被复…

长连接技术

个人学习记录,欢迎指正 1.轮询 1.1 轮询的形式 短连接轮询 前端每隔一段时间向服务端发起一次Http请求来获取数据。 const shortPolling () > { const intervalHandler setInterval(() > {fetch(/xxx/yyy).then(response > response.json()).then(respo…

TCP-IP 知识汇总

开放式系统互联模型------国际化标准组织ISO提出----协议组(协议模型) 应用层:接收用户数据,人机交互的接口 表示层:将编码转换为二进制(加密、解密)---统一格式 会话层:针对传输…

GEE:调用 Assets 中的数据

本文将介绍在 Google Earth Engine(GEE)平台上调用 Assets 中的数据的方法和代码。 文章目录 一、下载和保存1.1 保存影像数据到Assets1.2 保存矢量数据到Assets 二、调用2.1 调用影像2.2 调用矢量 三、数据路径获取3.1 数据路径 一、下载和保存 下载数…

【php基础】输出、变量、

php基础补充 1. 输出2.和"的区别3.变量3.1变量的命名规则3.2 两个对象指向同一个值3.3 可变变量 4.变量的作用域5. 检测变量 1. 输出 echo: 输出 print: 输出,输出成功返回1 print_r(): 输出数组 var_dump(): 输出数据的详细信息,带有数据类型和数…

【Numpy】练习题100道(51-75题)

🌻个人主页:相洋同学 🥇学习在于行动、总结和坚持,共勉! #学习笔记# Git-hub链接 目录 1.题目列表 2.题解 1.题目列表 51. 创建一个表示位置(x,y)和颜色(r,g,b)的结…

基于Java中的SSM框架实现万卷图书馆书籍借阅管理系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现万卷图书馆书籍借阅管理系统演示 摘要 图书管理系统,是一个由人、计算机等组成的能进行管理信息的收集、传递、加工、保存、维护和使用的系统。利用信息控制企业的行为;帮助企业实现其规划目标。 图书馆管理系统,能…

Python错题集-9PermissionError:[Errno 13] (权限错误)

1问题描述 Traceback (most recent call last): File "D:\pycharm\projects\5-《Python数学建模算法与应用》程序和数据\02第2章 Python使用入门\ex2_38_1.py", line 9, in <module> fpd.ExcelWriter(data2_38_3.xlsx) #创建文件对象 File "D:…

2024全新返佣商城分销商城理财商城系统源码 全开源PHP+VUE源码

2023全新返佣商城分销商城理财商城系统源码 全开源PHPVUE源码 程序安装环境要求&#xff1a; nginx1.16 php7.2 mysql5.6 程序全开源PHPVUE源码 有需要测试的老铁&#xff0c;拿去测试吧

每日学习笔记:C++ STL 的无序容器(unordered_set、unordered_map)

定义 特性 能够快速查找元素 操作函数 负载系数 元素个数 / bucket个数 提供哈希函数 提供等价准则 方法一&#xff1a;重写元素的操作符 方法二&#xff1a;自定义函数对象

【PyTorch】进阶学习:一文详细介绍 torch.save() 的应用场景、实战代码示例

【PyTorch】进阶学习&#xff1a;一文详细介绍 torch.save() 的应用场景、实战代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程…

simulink汽车动力特性模型

1、内容简介 略 76-可以交流、咨询、答疑 simulink汽车动力特性模型 节气门、Gasoline Engine、离合器、作动器 2、内容说明 略 齿轮半径1 0.06; 齿轮半径2 0.072; 有效齿轮半径 2/3*(radius2^3 - radius1^3)/(radius2^2 - radius1^2); 输入传动比 2.1; 输出传动比 1…

合作文章(IF=5.6)|16s+RNA-seq+短链脂肪酸检测揭示丁酸梭菌缓解食粪预防兔肠道炎症的新机制

1 研究背景 兔子摄取软性粪便是一种具有营养意义的生理习惯&#xff0c;可提供氨基酸、维生素和其他不能被胃肠道有效吸收的营养物质。除了营养益处外&#xff0c;粪食还能稳定肠道微生物群和功能&#xff0c;这可能具有下游的生理效应&#xff0c;如维持能量稳态、免疫系统发…