力扣: 两两交换链表中的节点

news/2024/9/18 12:11:06/ 标签: leetcode, 链表, 算法

文章目录

  • 需求
  • 代码
  • 代码解释
  • 结尾

在这里插入图片描述


需求

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

示例 1:
在这里插入图片描述

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

示例 2:
输入:head = []
输出:[]

示例 3:
输入:head = [1]
输出:[1]

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


代码

public ListNode swapPairs(ListNode head) {if( head == null || head.next == null ){return head;}ListNode preHead = new ListNode(-1, head);ListNode cur = preHead;while( cur.next != null && cur.next.next != null ){//  拿出前三个元素ListNode node1 = cur.next;ListNode node2 = node1.next;ListNode node3 = node2.next;//  交换node1.next = node3;node2.next = node1;cur.next = node2;//  重置 curcur = node1;}return preHead.next;
}

代码解释

处理特殊情况:

如果链表为空或者只有一个节点,直接返回 head。因为在这种情况下没有必要进行交换。

if (head == null || head.next == null) {return head;
}

初始化虚拟头节点:
ListNode preHead = new ListNode(-1, head);
创建一个虚拟头节点 preHead,它的 next 指向链表的实际头节点 head。这样做可以简化处理链表头部的交换操作。

初始化 cur 指针:

ListNode cur = preHead;
cur 指针用来跟踪当前处理的位置,最初指向 preHead。在交换过程中,cur 负责保持对链表已经交换部分的连接。

交换节点:

while (cur.next != null && cur.next.next != null) {//  拿出前三个元素ListNode node1 = cur.next;ListNode node2 = node1.next;ListNode node3 = node2.next;//  交换node1.next = node3;node2.next = node1;cur.next = node2;//  重置 curcur = node1;
}

提取三个节点:
node1:当前 cur 节点的下一个节点。
node2:node1 的下一个节点。
node3:node2 的下一个节点。

交换节点:

node1.next = node3:将 node1 的 next 指向 node3(即交换后 node1 之后的节点)。
node2.next = node1:将 node2 的 next 指向 node1(交换节点 2 和节点 1)。
cur.next = node2:将 cur.next 更新为 node2,完成交换后的连接。

更新 cur:

cur = node1:将 cur 指向 node1,为下一对节点的交换做好准备。

返回结果:

return preHead.next;
返回 preHead.next,它指向链表交换后的新头节点。

执行结果:

在这里插入图片描述

结尾

以上 是我对这道算法的一些遐想和延伸, 可能不是最优解, 但是算法的优化嘛 本身就是一个思索的过程, 能在这个思索和迭代的过程中有所收获和乐趣就是在成长了, 欢迎大家一起来交流更多的解答…






http://www.ppmy.cn/news/1516448.html

相关文章

工厂模式与策略模式:理解与应用

工厂模式与策略模式&#xff1a;理解与应用 1. 引言2. 工厂模式简介2.1 定义2.2 特点2.3 应用场景2.4 工厂模式例子&#xff1a;咖啡制作 3. 策略模式简介3.1 定义3.2 特点3.3 应用场景3.4 策略模式例子&#xff1a;咖啡定价 4. 区别4.1 目的不同4.2 应用场景不同4.3 解决问题不…

浅谈Java Maven

一、基本介绍 Maven是Java项目的构建工具&#xff0c;通过项目对象模型&#xff08;POM&#xff09;管理项目配置信息&#xff0c;自动化构建、测试和部署过程。开发人员可定义项目结构、依赖和构建流程&#xff0c;提高开发效率和质量。本文介绍基本概念和用法&#xff0c;帮助…

【YOLOv8改进[Conv]】 感受野注意力卷积RFAConv(2024.3)| 使用RFAConv改进目标检测效果 + 含全部代码和详细修改方式

本文将进行在YOLOv8中使用 感受野注意力卷积RFAConv改进v8 的实践,助力YOLOv8目标检测效果,文中含全部代码、详细修改方式。助您轻松理解改进的方法。

时尚图像编辑

时尚图像编辑是一种应用计算机视觉和机器学习技术来改变或增强时尚摄影图像的领域。这种编辑可以包括更改服装颜色、形状或整体风格&#xff0c;以及调整模特在图像中的姿态或场景背景。 在您提到的背景中&#xff0c;现有的时尚图像编辑方法依赖于如分割器和关键点提取器这样…

FreeRTOS学习笔记>中断管理

1. 异常的定义与分类 异常&#xff1a;是指任何导致处理器脱离正常执行路径、并转向执行特定代码的事件。异常如果不及时处理&#xff0c;可能导致系统错误甚至瘫痪&#xff0c;因此异常处理对于系统的稳定性和鲁棒性非常重要&#xff0c;特别是在实时系统中。异常分类&#x…

【markdown 中的文字颜色设置】按色系分类

文本颜色分类 蓝绿色系:灰色系:蓝紫色系:粉色系:绿色系:橘棕色系:语法,以天蓝色为例: <font color=skyblue>我是文字</font>我是文字 或者 替换成对应的16进制 <font color=#87CEEB>同理</font>同理 接下来是按色系分类的颜色名 蓝绿色系: …

速盾:前端cdn加速是什么意思?

前端CDN加速是指通过使用内容分发网络&#xff08;CDN&#xff09;来加速前端页面加载和内容访问的一种技术手段。CDN是一种分布式架构的网络&#xff0c;通过将内容缓存到离用户更近的服务器节点上&#xff0c;可以有效地减少网络延迟&#xff0c;并提高页面加载速度和用户体验…

Golang测试func TestXX(t *testing.T)的使用

一般Golang中的测试代码都以xxx_test.go的样式&#xff0c;在命名测试函数的时候以Testxx开头。 以下是我写的一个单元&#xff1a; package testsimport "strings"func Split(s, sep string) (res []string) {i : strings.Index(s, sep)for i > -1 {res append…

ASAM OpenX系列标准

ASAM OpenX系列标准是由德国自动化及测量系统标准协会&#xff08;ASAM&#xff09;制定的一系列标准&#xff0c;旨在推动自动驾驶仿真测试领域的发展。该系列标准涵盖了仿真测试场景的不同方面&#xff0c;为自动驾驶技术的研发、测试和验证提供了统一的规范和框架。以下是对…

Dopamine(多巴胺)越狱工具一键越狱教程:支持 iOS 15-iOS 16.6.1 设备

Dopamine&#xff08;多巴胺&#xff09;越狱工具由巨魔商店 TrollStore 的作者 opa334 联合 ellekit 开发&#xff0c;是公开的一个开源越狱工具&#xff0c;面向所有人员使用。用户可通过爱思助手“一键越狱”安装此工具进行越狱&#xff0c;操作更加便捷&#xff0c;以下是相…

ffmpeg教程及加速视频转码

ffmpeg教程及加速视频转码 1、ffmpeg简介&#xff1a; ffmpeg来自MPEG视频编码标准。 是一套可以用来记录&#xff0c;转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。 可以轻易的实现多种视频格式之间的相互转换。 2、基础知识&#xff1a; 容器、文件…

ZooKeeper--基于Kubernetes部署ZooKeeper

ZooKeeper 服务 服务类型: 无头服务&#xff08;clusterIP: None&#xff09;&#xff0c;这是 StatefulSet&#xff08;有状态集&#xff09;必需的配置。 端口: 2181 (客户端): 用于客户端连接。 2888 (跟随者): 用于 ZooKeeper 服务器之间的连接。 3888 (领导者): 用于领导者…

多平台谷歌浏览器驱动下载地址分享

多平台谷歌浏览器驱动下载地址分享 一、概述二、windows、linux、mac平台下载地址2.1windows平台下载地址2.2linux、mac平台下载地址 三、arm平台下载地址参考文档 一、概述 在使用一些自动化网页测试工具时&#xff0c;往往需要下载谷歌浏览器驱动文件&#xff0c;用于配合工…

虚幻5|按键触发学习

一&#xff0c;如图参考 1.下移 驱动阈值 越大按时间长才会触发&#xff0c;越小很快就可以触发 2.按下 当按下超出驱动阈值大小就会触发一次&#xff0c;这里的驱动阈值只能设置再0.1~1的大小 3.已松开 当按下的时候&#xff0c;先触发单次的started&#xff0c;如果按压…

[多线程] linux中的线程调度策略

文章目录 多线程调度如何设置调度策略Reference 多线程调度 包含5种线程调度&#xff1a; SCHED_OTHER&#xff1a;SCHED_FIFO&#xff1a;SCHED_RR&#xff1a;SCHED_BATCH&#xff1a;SCHED_IDLE&#xff1a; 如何设置调度策略 在Linux系统中&#xff0c;线程调度策略可以…

分组汇总后再根据数量拼上不同文字

Excel某表格有2列。 AB1Apples32Apples03Bananas14Bananas65Cantaloupe06Kiwis27Kiwis28Kiwis1 要求&#xff1a;按第1列分组&#xff0c;如果组内第2列大于0则对当前行进行计数&#xff0c;否则不计数&#xff1b;计数结果等于1则附加Occurrence&#xff0c;否则附加 Occurr…

一个php快速项目搭建框架源码,带一键CURD等功能

介绍&#xff1a; 框架易于功能扩展&#xff0c;代码维护&#xff0c;方便二次开发&#xff0c;帮助开发者简单高效降低二次开发成本&#xff0c;满足专注业务深度开发的需求。 百度网盘下载 图片&#xff1a;

OpenGL3.3_C++_Windows(36)

PBR_IBL镜面部分 镜面部分并不能像漫反射部分一样将常量提取出来&#xff0c;因为它受到wi和w0的影响&#xff0c;就比如一个x的等式&#xff0c;不能把x部分提取出来一样&#xff0c;他是随着等式变化的但是如果放在等式中&#xff0c;计算所有的可能性&#xff0c;计算量会极…

大模型网络安全能力和风险评估框架Cybench

大模型网络安全能力和风险评估框架Cybench 前言 语言模型在网络安全领域的双重应用&#xff0c;既可以用于攻击&#xff08;如识别并利用代码漏洞&#xff09;&#xff0c;也可以用于防御&#xff08;如渗透测试和漏洞检测&#xff09;。当前的研究包括对CTF挑战、代码片段中的…

100101-批量将指定文件夹下视频时长快进或慢放到指定时长,指定比例尺寸,例如将50S视频转为1:1尺寸的30S-UI

程序功使用环境▶适用的系统环境说明&#xff1a;win7以上64位win系统注意&#xff1a;win32位系统/mac系统需要额外定制▶使用期限&#xff1a;无需注册、不绑电脑、无时间限制▶如何安装&#xff1a;不需要安装程序功能说明▶子文件夹穿透&#xff1a;支持▶支持的文件格式&a…