代码随想录刷题day13|(链表篇)24.两两交换链表中的结点
目录
一、链表理论基础
二、思路及易错点
易错点
三、相关算法题目
四、错误代码分析
一、链表理论基础
代码随想录 (programmercarl.com)
二、思路及易错点
该题使用虚拟头结点正常进行模拟即可,有两个关键点,一是循环何时终止?终止条件怎么写?二是交换结点的顺序;
易错点
1.如何确定循环终止的条件?
首先,在进行交换时,一定要知道被交换结点的前一个结点,当前指针一定要指向2个交换结点的前一个结点,才可以进行操作;
假设当前有奇数个结点[0,1,2,3,4,5](0代表虚拟结点),指向0,操作1、2;指向2,操作3、4,指向4,操作5和null,所以终止循环条件为:curr.next.next == null;
假设当前有偶数个结点[0,1,2,3,4](0代表虚拟结点),指向0,操作1、2;指向2(⚠️这里是指第二个位置的结点,不是说值为2的结点),操作3、4,指向4,操作null,所以终止循环条件为:curr.next == null;
当链表为空时,相当于有0个结点,适用于偶数情况;
综上,终止循环条件为 while(curr.next != null && curr.next.next != null);&&表示只有两个条件都满足(不为空)才会进入循环,交换结点,否则(有一个条件为空)就会终止循环,交换结束;另外,条件的书写顺序不能颠倒,否则curr.next如果为空,curr.next.next会报空指针异常的错误;
2.定义几个临时指针?初始值分别为?
两种情况
情况1:可以定义操作指针curr,初始指向虚拟头结点(对交换结点前一个结点进行操作);临时指针first,存储两个结点中的第一个结点,初始指向第一个位置的结点,通过curr赋值;临时结点second,存储两个结点中第二个结点,初始指向第二个位置的结点,可通过curr赋值,也可以通过first赋值;临时指针temp,存储两个结点后面的结点,初始值为第三个位置的结点,可通过curr赋值,也可以通过second赋值;具体代码见相关算法题目;
情况2:也可以定义操作指针curr,初始同上;临时指针temp,存储两个结点中第一个结点的位置,
3.交换结点的顺序
见下图:
如果定义指针是第二种情况(curr和temp),那么顺序只能为:① -> ③ -> ②;
③必须在②前面:如果先②,更改第二个结点的指针方向,那么第三个结点的值就会失去,无法获得,第一个结点就无法更改指针方向;因为temp保存了第一个结点的位置,所以一般先操作结点1,也就是先①;
如果定义指针时第一种情况,无特殊限制,一般为:① -> ② -> ③

三、相关算法题目
24.两两交换链表中的结点
24. 两两交换链表中的节点 - 力扣(LeetCode)
class Solution {public ListNode swapPairs(ListNode head) {ListNode dummy = new ListNode();dummy.next = head;ListNode curr = dummy;ListNode temp;//临时结点 保存两个结点后面的结点ListNode first; //临时结点 保存两个结点中第一个结点ListNode second; //临时结点 保存两个结点中第二个结点while(curr.next != null && curr.next.next != null){//更新first、second、tempfirst = curr.next;second = first.next; //也可以这样更新second和temptemp = second.next;//second = curr.next.next;//temp = curr.next.next.next;//两两交换结点curr.next = second;second.next = first;first.next = temp;//更新curr ⭐️curr = first;}return dummy.next;}
}
具体交换过程如下图:
更新curr时注意,应该为下一组交换结点的前一个结点,也就是第二个位置处的结点,即值为1的结点,也即first

四、错误代码分析
思路:定义一个临时指针temp,用于存储交换结点中第一个结点,定义操作指针curr;
class Solution {public ListNode swapPairs(ListNode head) {ListNode dummy = new ListNode();dummy.next = head;ListNode curr = head;ListNode temp = null;while(curr.next != null && curr.next.next != null){temp = curr.next;//保存结点1的值curr.next = curr.next.next;//虚拟头 指向2temp.next = curr.next.next;//1指向3curr.next = temp;//2指向1//更新currcurr = temp.next;}return dummy.next;}
}
错误1:ListNode curr = head;
A:curr初始指向dummy;
错误2: curr.next = temp;//2指向1
A:交换结点的第三步,也是步骤③,结点2更改方向,指向结点1(temp),此时curr.next = 结点2,那么结点2的指针域应该为 curr.next.next,
正确代码为:curr.next.next = temp;
错误3:curr = temp.next;//更新curr
A:temp指向值为1的结点,交换以后,temp指向不变,但是,此时,值为1的结点位置已经发生变化,经过交换,其由第一个位置变成了第二个位置,也就是下一次交换,curr需要指向的位置,可见下图更清晰;
正确代码为:curr = temp; 或者 curr = curr.next.next;

相关文章:
代码随想录刷题day13|(链表篇)24.两两交换链表中的结点
目录 一、链表理论基础 二、思路及易错点 易错点 三、相关算法题目 四、错误代码分析 一、链表理论基础 代码随想录 (programmercarl.com) 二、思路及易错点 该题使用虚拟头结点正常进行模拟即可,有两个关键点,一是循环何时终止?终止…...
集群、分布式及微服务间的区别与联系
目录 单体架构介绍集群和分布式架构集群和分布式集群和分布式区别和联系 微服务架构的引入微服务带来的挑战 总结 单体架构介绍 早期很多创业公司或者传统企业会把业务的所有功能实现都打包在一个项目中,这种方式就称为单体架构 以我们都很熟悉的电商系统为例&…...
MySQL(4)多表查询
引言:为什么需要多表的查询? A:提高效率,多线进行。 高内聚、低耦合。 一、多表查询的条件 1、错误的多表查询: SELECT employee_id,department_name FROM employees,departments; SELECT employee_id,department…...
web前端3--css
注意(本文一切代码一律是在vscode中书写) 1、书写位置 1、行内样式 //<标签名 style"样式声明"> <p style"color: red;">666</p> 2、内嵌样式 1、style标签 里面写css代码 css与html之间分离 2、css属性:值…...
【Nacos】Nacos快速上手
Nacos快速上手 项目环境介绍一、服务注册/服务发现1.引入Spring Cloud Alibaba依赖2.引入Nacos相关的依赖3.引入Load Balance依赖4.配置Nacos的地址 二、修改远程调用代码三、测试四、启动多个服务,测试负载均衡五、可能出现的问题 项目环境介绍 请你确保你的服务器…...
C++otlv4连接sql serveer使用记录(注意点)
C使用otlv4在做插入时,有一些设计的坑需要注意 插入数据: 当要给表中插入单个字符时,数据库表设计使用varchar(1)是合理的,但是otlv4一直报错char。 后续查很久才知道,otlv4所写的绑定的字符数组的长度应该实际数组…...
在Linux中,如何查询已安装软件包的版本信息?
在Linux中,查询已安装软件包的版本信息可以使用多种方法,具体取决于你使用的Linux发行版及其所采用的包管理器。 RPM-based Linux系统(如Red Hat、CentOS、Dedora) 使用rpm命令查询所有已经安装的特定软件包及其版本:…...
搜广推实习面经四
字节跳动TAC 广告算法 一、回归任务的评价指标有哪些 1.均方误差(Mean Squared Error, MSE)/均方根误差(Root Mean Squared Error, RMSE) M S E 1 n ∑ i 1 n ( y i − y ^ i ) 2 MSE \frac{1}{n} \sum_{i1}^{n} (y_i - \ha…...
【Elasticsearch】inference ingest pipeline
Elasticsearch 的 Ingest Pipeline 功能允许你在数据索引之前对其进行预处理。通过使用 Ingest Pipeline,你可以执行各种数据转换和富化操作,包括使用机器学习模型进行推理(inference)。这在处理词嵌入、情感分析、图像识别等场景…...
AQS公平锁与非公平锁之源码解析
AQS加锁逻辑 ReentrantLock.lock public void lock() {sync.acquire(1);}AbstractQueuedSynchronizer#acquire public final void acquire(int arg) {if (!tryAcquire(arg) &&acquireQueued(addWaiter(Node.EXCLUSIVE), arg))selfInterrupt();}addWaiter就是将节点加入…...
若依框架在企业中的应用调研
若依框架作为一款基于 Spring Boot 的轻量级 Java 快速开发框架,在企业级应用开发中发挥着重要作用。以下是对其在企业中应用的调研情况: 应用现状 广泛应用于多种管理系统:在众多企业中,若依框架常被用于构建各类后台管理系统&a…...
【Day23 LeetCode】贪心算法题
一、贪心算法 贪心没有套路,只有碰运气(bushi),举反例看看是否可行,(运气好)刚好贪心策略的局部最优就是全局最优。 1、分发饼干 455 思路:按照孩子的胃口从小到大的顺序依次满足…...
2025年PHP面试宝典,技术总结。
面试是进入职场的第一道坎,因为我本身学校太一般的问题在面试中遇到了各种不爽,和那些高学历的相比自己真是信心大跌。我面试的方向是php开发工程师,主要做网站后台、APP接口等。下面是我这段时间总结的面试方面的常考常问的知识点࿰…...
Qt中的按钮组:QPushButton、QToolButton、QRadioButton和QCheckBox使用方法(详细图文教程)
💪 图像算法工程师,专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 &a…...
influxdb+grafana+jmeter
influxdb influxd先启动 启动完成后执行 influxdb的端口号 grafana的启动 通过grafana-server.exe启动grafana 启动后打开 http://localhost:8087/...
Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)
系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…...
leetcode 479. 最大回文数乘积
题目如下 看完题目后没有想到取巧的办法所以尝试使用枚举法。 使用枚举法之前先回答两个问题: 1. 如何构造回文串? 2. 如何判断是否存在两个n位整数相乘可以得到这个回文串? 显然n位数与n位数相乘必然是2n位数也就是说最大回文整数长度必然…...
独立搭建UI自动化测试框架
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 今天给大家分享一个seleniumtestngmavenant的UI自动化,可以用于功能测试,也可按复杂的业务流程编写测试用例,今天此篇文章不过多…...
62,【2】 BUUCTF WEB [强网杯 2019]Upload1
进入靶场 此处考点不是SQL,就正常注册并登录进去 先随便传一个 进行目录扫描,我先用爆破代替 先随便后面写个文件名 为了提供payload位置 www.tar.gz真的存在 返回浏览器修改url就自动下载了 看到tp5,应该是ThinkPHP5框架 参考此博客的思路方法c[强网杯…...
Spring Boot 整合 ShedLock 处理定时任务重复执行的问题
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…...
Phi-4-mini-reasoning部署指南:多模型共存时GPU显存隔离与服务端口分配
Phi-4-mini-reasoning部署指南:多模型共存时GPU显存隔离与服务端口分配 1. 项目概述 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型,专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这个模型主打"小参数、强推理、长上下文、低延…...
新手福音:通过快马生成的示例项目,轻松上手豆包开放平台第一个AI调用
今天想和大家分享一个特别适合新手入门豆包开放平台的小项目——用快马生成的"天气查询助手"。作为一个刚接触API开发的小白,我发现这种方式真的能快速理解整个调用流程,而且完全不需要从零开始写代码。 项目背景与功能设计 这个天气查询助手…...
嵌入式必看学习路线
嵌入式学习路线第一阶段:C语言基础(必须扎实)数据类型:字符型(char)、短整型(short)、整型(int)、 长整型(long)、超长整形(long long)、…...
4个硬核技巧:用GHelper实现华硕笔记本性能与续航的完美平衡
4个硬核技巧:用GHelper实现华硕笔记本性能与续航的完美平衡 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Stri…...
如何用clawPDF高效解决日常办公中的5大文档处理难题?
如何用clawPDF高效解决日常办公中的5大文档处理难题? 【免费下载链接】clawPDF Open Source Virtual (Network) Printer for Windows that allows you to create PDFs, OCR text, and print images, with advanced features usually available only in enterprise s…...
终极指南:@ngx-translate/core与懒加载模块的完美结合方案
终极指南:ngx-translate/core与懒加载模块的完美结合方案 【免费下载链接】core The internationalization (i18n) library for Angular 项目地址: https://gitcode.com/gh_mirrors/core81/core ngx-translate/core是Angular生态中最流行的国际化(i18n)库&am…...
一次性拖鞋自动下料系统设计超声波热熔裁剪机设计【论文+CAD图纸+solidworks三维+开题报告+任务书+实习调研报告+其它相关资料】
一次性拖鞋自动下料系统与超声波热熔裁剪机的设计,聚焦于提升拖鞋制造环节的效率与精度。传统拖鞋生产中,人工下料易受操作误差影响,导致材料浪费与产品尺寸偏差;而普通裁剪方式可能因热熔不充分,出现边缘毛刺或连接不…...
OpenAI GPT-Image-2 泄露:世界知识与文字渲染的重大飞跃
导语这篇是 GPT Image 2 泄露事件的首次大规模传播节点,由知名开发者 levelsio 发布,24小时内获得 3700 赞、104万 浏览。推文附图展示了 YouTube UI、解剖图、世界地图等多个测试案例,揭示了 OpenAI 新一代图像模型在文字渲染和世界知识方面…...
OpenClaw+千问3.5-35B-A3B-FP8:个人内容助手从写作到配图全流程
OpenClaw千问3.5-35B-A3B-FP8:个人内容助手从写作到配图全流程 1. 为什么需要自动化内容生产 去年我开始运营技术博客时,每周要花5-6小时在内容生产上:从构思大纲、撰写初稿到寻找配图,最后还要手动调整Markdown格式。直到发现O…...
Qwen-Turbo-BF16与MATLAB协同计算:科学研究的AI加速器
Qwen-Turbo-BF16与MATLAB协同计算:科学研究的AI加速器 打通AI大模型与科学计算平台的数据通道,让科研效率提升10倍 1. 引言:当AI大模型遇上科学计算 在流体力学实验室里,张博士正在处理一组复杂的湍流模拟数据。传统方法需要3天时…...
