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

news2024/12/23 11:08:33

一、题目

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

二、示例

2.1> 示例 1:

输入】head = [1,2,3,4]
输出】[2,1,4,3]

2.2> 示例 2:

输入】head = []
输出】[]

2.3> 示例 3:

输入】head = [1]
输出】[1]

提示:

  • 链表中节点的数目在范围 [0, 100] 内
  • 0 <= Node.val <= 100

三、解题思路

3.1> 思路1:遍历交换

根据题目描述,我们需要两两交换节点,然后将最终交换后的链表的头节点返回回来。那么第一个解题思路就是我们通过遍历链表中的节点,然后进行交换操作。为了方便起见,我们可以在原链表的头节点前面再创建一个虚拟节点Node(-1),然后创建两个指针p1p2p1指向虚拟节点,p2指向原链表的头节点(即:Node(-1)next节点),这样,我们就可以通过一下逻辑实现节点交换了,以输入head = [1,2,3,4,5]为例,即:

步骤1】通过调用ListNode t = p2.next.next暂存Node(3)节点;
步骤2】通过调用p1.next = p2.next来将Node(-1)链接到Node(2)节点;
步骤3】通过调用p2.next.next = p2来将Node(2)链接到Node(1)节点;
步骤4】通过调用p2.next = t来将Node(1)链接到Node(3)节点;
交换结果】此时链表就变为了Node(-1)——>Node(2)——>Node(1)——>Node(3)——>……了。

执行了一次两个相邻节点交换操作之后,我们需要同时移动p1p2指针,即:

移动p2指针p2 = p2.next;
移动p1指针p1 = p1.next.next;

以上就是本题的解题思路,为了方便大家理解,我们以输入为 head = [1,2,3,4,5] 为例,来看一下具体的操作流程。请见下图所示:

3.2> 思路2:递归交换

我们除了思路一的解题方式之外,还可以通过递归的方式进行解题,其实具体思路跟思路1是极其相似的,只是写法的差异而已,此处就不再赘述和画图了,具体的解题请见下方实现2的代码部分即可。

四、代码实现

4.1> 实现1:遍历交换

class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode temp = new ListNode(-1, head);
        ListNode p1 = temp, p2 = head;
        while(p2 != null && p2.next != null) {
            ListNode t = p2.next.next;
            p1.next = p2.next;
            p2.next.next = p2;
            p2.next = t;
            p2 = p2.next;
            p1 = p1.next.next;
        }
        return temp.next;
    }
}
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */

4.2> 实现2:递归交换

class Solution {
    public ListNode swapPairs(ListNode head) {
        if (head == null || head.next == null) return head;
        ListNode newHead = head.next;
        head.next = swapPairs(head.next.next);
        newHead.next = head;
        return newHead;
    }
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

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

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

相关文章

Linux——gdb调试器

目录 前言&#xff1a; 二.gdb定义及指令&#xff1a; 如何查看该exe文件是否为Debug版本?两种方法: 三.gdb调试&#xff1a; 调试指令1&#xff1a;l指令(小写L) run指令&#xff1a;运行程序&#xff0c;相当于VS中的直接运行不调试——可简化输入r break指令&#xff1…

时序预测 | MATLAB实现基于均方误差节点搜索优化BP神经网络的时间序列预测(多指标评价、多节点计算)

时序预测 | MATLAB实现基于均方误差节点搜索优化BP神经网络的时间序列预测(多指标评价、多节点计算) 目录 时序预测 | MATLAB实现基于均方误差节点搜索优化BP神经网络的时间序列预测(多指标评价、多节点计算)预测效果基本介绍模型描述程序设计参考资料预测效果

基于yolov5全系列模型【n/s/m/l/x】开发构建汉字检测识别系统,调整图像尺寸分别对别416x416和640x640不同分辨率下的性能结果

汉字检测对我来说不是什么新鲜的内容了&#xff0c;因为早在之前的时候就已经有开发过相关的项目了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《基于轻量级YOLOv5开发构建汉字检测识别分析系统》 《基于轻量级目标检测模型实现手写汉字检测识别计数》 《超轻…

港联证券|港股拥抱特专科技企业 内资券商“修炼内功”蓄势而为

港股市场新一轮改革举措渐次落地。特别是港交所推出特专科技公司上市机制&#xff0c;吸引符合资格的科技企业申请赴港上市&#xff0c;成为这一轮港股市场改革的“重头戏”。 作为香港资本市场的重要参与者&#xff0c;内资券商立足香港、背靠内地、辐射全球&#xff0c;走出一…

万国数据财报:股价暴跌51%,盈利能力下滑,万国数据前景黯淡

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 收入增长前景 万国数据&#xff08;GDS&#xff09;在3月中旬发布2022财年财务业绩时&#xff0c;为该公司提供了2023财年全年的收入指引。考虑到市场对万国数据的预期和其股价历史表现&#xff0c;猛兽财经认为&#xff0…

【zmq】ZeroMQ安装与入门案例

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍ZeroMQ的使用。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习知识&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&…

java原生LinkedList详解

java原生LinkedList详解 实际上在IDEA,JDK环境下的LinkList底层就是一个双向链表&#xff0c;由于链表没有将元素存储在连续的空间中&#xff0c;元素存储在单独的节点中&#xff0c;然后通过引用将节点连接起来了&#xff0c;因此在在任意位置插入或者删除元素时&#xff0c;…

DMA控制两路DAC同时输出指定波形

0. 实验目标 使用 DMA 控制 DAC1 和 DAC2 同时输出不一样的波形&#xff0c;实验平台STM32F407ZG 1. 原理部分 1.1 DMA DMA 全称为&#xff1a;Direct Memory Access&#xff0c;即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输&#xff0c;也没有中断处理方式那样保…

mycat2主从配置实现读写分离

mycat2主从配置实现读写分离 在https://blog.csdn.net/zhangxue_wei/article/details/130840504基础上继续搭建 1.创建mycat数据源&#xff0c;可以在navcat里直接执行 1.1读数据源m1 /* mycat:createDataSource{"dbType":"mysql","idleTimeout&qu…

Cisco Secure Web Appliance Virtual 15.0 发布 - 适用于网络安全的思科高级威胁防护

Cisco Secure Web Appliance Virtual, AsyncOS for WSA 15.0.0 LD 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-secure-web-appliance-15/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Cisco Secure Web Appli…

Windows Server 2022 中文版、英文版下载 (updated May 2023)

Windows Server 2022 中文版、英文版下载 (updated May 2023) Windows Server 2022 正式版&#xff0c;2023 年 5 月更新 请访问原文链接&#xff1a;https://sysin.org/blog/windows-server-2022/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&a…

西南交通大学智能监测 培训课程练习1

2023.05.24培训 task1&#xff1a;ER的用法、对应数据库的设计 task2&#xff1a;熟悉数据库基本操作、使用Navicat 目录 一、E-R图是什么 二、E-R图的组成要素 三、E-R图绘制 四、E-R图实例 4.1E-R图转换到关系模式 4.2具体数据表设计 五、Mysql基础操作 5.1操作数据库…

燃料电池系统控制技术的演进

背景 随着环保意识的不断提高&#xff0c;对清洁能源的需求也日益增加。燃料电池作为一种高效、低污染的清洁能源&#xff0c;受到了广泛关注和重视。与传统燃烧发电相比&#xff0c;燃料电池具有高效、无污染、静音等优点&#xff0c;可以成为未来清洁能源的主要来源之一。 …

docker拉取镜像报错Error response from daemon: Get https://registry-1.docker.io/v2/:

阅读前请看一下&#xff1a;我是一个热衷于记录的人&#xff0c;每次写博客会反复研读&#xff0c;尽量不断提升博客质量。文章设置为仅粉丝可见&#xff0c;是因为写博客确实花了不少精力。希望互相进步谢谢&#xff01;&#xff01; 文章目录 阅读前请看一下&#xff1a;我是…

chatgpt赋能python:Pythonshutil.move:一个强大的文件移动工具

Python shutil.move&#xff1a;一个强大的文件移动工具 文件的移动和重命名是我们日常工作中经常会碰到的操作之一。Python的shutil模块提供了很多方便的工具&#xff0c;其中shutil.move是其中一个强大的工具&#xff0c;可以在文件系统中移动和重命名文件。在本文中&#x…

chatgpt赋能python:Python模型保存的完整指南:如何保存和加载模型

Python模型保存的完整指南&#xff1a;如何保存和加载模型 介绍 Python是一个十分强大的编程语言&#xff0c;它的简单易用的语法和丰富的库使其成为了机器学习开发者的首选。在机器学习领域&#xff0c;我们经常需要训练和保存模型&#xff0c;以便在实际应用中使用。本文将…

SpringCloud:(图书预约的操作)

借阅图书的操作主要是添加借阅记录&#xff1a; 在这张表上添加记录&#xff0c;并在t_book这张表上扣除库存的操作 下面我们开始进行操作&#xff1a; 首先我们创建t_borrow表的实体类在book项目中&#xff1a; package com.laosan.book.entity;import lombok.Data;import j…

成都PMP培训机构有推荐的吗?

PMP考试是不是必须要报班&#xff1f;自学可以考试吗&#xff1f;不需要报班的话&#xff0c;自学难度大吗&#xff1f;成都PMP培训机构有推荐的吗&#xff1f; 首先&#xff0c;PMP考试并非必须要报班&#xff0c;自学也可以考试。但是需要注意的是&#xff0c;PMP考试难度较大…

Centos7.9基于Kubeasz部署k8s 1.27.1高可用集群

一&#xff1a;kubeasz 的介绍 kubeasz 致力于提供快速部署高可用k8s集群的工具, 同时也努力成为k8s实践、使用的参考书&#xff1b; 基于二进制方式部署和利用ansible-playbook实现自动化&#xff1b;既提供一键安装脚本, 也可以根据安装指南分步执行安装各个组件。 kubea…

简单分享在微信上扫码点餐小程序怎么做

目前市场上有很多扫码点餐的小程序系统&#xff0c;制作方法有三种&#xff1a; 1、使用微信商家推出的扫码点餐小程序&#xff0c;上传营业执照和食品经营许可证就可以开通使用&#xff0c;然后上传自己的菜品信息就可以了&#xff0c;功能相对比较简单。 2、购买餐饮系统公司…