【实战】ACM 选手图解 LeetCode 交换链表

【经典算法】LeetCode24. 两两交换链表中的节点(Java/C/Python3/Golang实现含注释说明,中等) 方式优点缺点时间复杂度空间复杂度其他迭代法(使用哑节点)代码简洁,易于理解需要额外的哑节点O(n)O(1)适用于链表头部处理迭代法(不使用哑节点)不需要额外空间(除了变量)处理链表头部时稍复杂O(n)O(1)需特别注意链表头部的变化递归法代码优雅,易于理解可能存在栈溢出风险,空间效率不如迭代法O(n)O(n)(递归栈空间)适用于链表长度较短的情况在以上三种方式中,迭代法(不使用哑节点)和递归法都是直接对原链表进行操作,不需要额外的节点空间(除了必要的变量)。 阅读详情

大家好呀,我是蛋蛋。

今天开搞交换链表,和反转链表一样,也是必考的“老熟人”。

话不多说,直接开工。

40d1f6698708b8161025dbcef5514d4

LeetCode 24:交换链表

题意

两两交换链表相邻节点的值,返回交换后的链表。

示例

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

输出: [2, 1, 4, 3]

提示

  • 0 <= 链表节点数 <= 100

  • 0 <= Node.val <= 100

题目解析

水题,难度中等。

这道题要求不能只是单纯的改变节点内部得值,需要进行实际的节点交换。

和反转链表一样,这类链表题思维上没有难度,就是每次从链表上截取两个节点进行交换。

主要是考察代码实现能力。

这道题我用带虚拟头节点的单链表实现。

虚拟头节点(其实我以前都叫头节点,后来有臭宝和我说容易看混,我就叫虚拟头节点),可能很多人叫做哨兵节点,放在第一个元素的节点之前,数据域一般没意义。

图解

先建立一个带虚拟头节点的单链表。

fda0fd241a014afc68089959308e254

PS:此处代码为 Python(”代码实现“小节处有 Java 代码,下同)。

# 链表节点类
class ListNode:
     def __init__(self, val=0, next=None):
         self.val = val
         self.next = next
# 创建虚拟节点
dummyHead = ListNode(-1)

因为每次要截取两个节点进行交换,初始建立 3 个指针 pre,p 和 q。

其中 pre 指向虚拟头节点,p 指向链表首节点,q 指向链表的第 2 个节点。

7ee9622db7124b90218b60be2a0f686

pre = dummyHead
p = head
q = p.next

节点两两交换主要分为 3 步。

第 1 步:pre 的后继指针 next 指向 q,即 pre.next = q。

362cfa820e6e73f6ce4046d588a5467

第 2 步:p 的后继指针 next 指向 q 的后继节点,即 p.next =

LeetCode 24. 两两交换链表中的节点【知识点:虚拟表头,迭代,递归】 链表,递归 阅读详情

相关推荐

LeetCode 第24题:两两交换链表中的节点

今天,我们深入解析了LeetCode第24题——两两交换链表中的节点。通过引入哨兵节点和双指针遍历,我们成功地实现了节点的两两交换。这个过程就像是在舞会上交换舞伴,每一步都充满了算法的乐趣和智慧。在解题过程中,我们不仅掌握了链表操作的技巧,还体验了算法世界的奇妙。希望大家通过这篇文章,对链表操作和算法设计有更深的理解,也能在实际编程中应用这些技巧,解决更多有趣的问题。

Gemini的博客 327

C++总结笔记

/ ++操作 这是因为定义的数组,申请的是连续的内存空间,当ptr++(ptr是int类型的指针变量),地址空间向后偏移是以int类型的大小为单位进行偏移的,相当于int类型数组元素的向后偏移。使用场景:它是最通用的转换形式,用于将一种类型转换为另一种类型,例如基本数据类型的转换(如 float 转 int),指向基类的指针或引用转为指向派生类的指针或引用等。在派生类被调用时会调用派生类中的函数,不会调用基类中的被重写的函数(基类中的函数需要加上virtual才可以,即基类中的函数是虚函数)。

weixin_50890461的博客 5236

2025-E题国一-简易自行瞄准装置:基于嘉立创地猛星/天猛星与K230的视觉巡线云台系统设计

本文详细介绍了2025年全国大学生电子设计竞赛E题一等奖作品——基于嘉立创地猛星/天猛星与K230的视觉巡线云台系统设计。该系统通过地猛星主控实现小车巡线,天猛星主控驱动云台,结合K230开发板的视觉识别能力,构建了一套完整的视觉巡线云台系统,实现了自动巡线与精准瞄准功能。文章深入剖析了硬件选型、双闭环PID控制算法、视觉识别与目标跟踪等核心技术,并分享了系统调试与避坑经验。

weixin_42596011的博客 676

CS算法实战:用MATLAB从零实现SAR点目标成像(附完整代码)

本文详细介绍了如何使用MATLAB从零实现SAR点目标CS成像算法,涵盖Chirp Scaling(CS)算法的核心理论、距离徙动校正(RCMC)和方位压缩等关键步骤。通过完整的代码示例和实战技巧,帮助读者掌握SAR成像处理算法,提升遥感图像处理能力。

weixin_29211309的博客 179

42页Claude 3技术报告解读(Opus, Sonnet, Haiku)

在Claude 3模型中,增加了一个额外的原则到Claude的宪法中,以鼓励尊重残疾人权利,这一原则源自对集体宪法AI的研究。Claude 3模型的训练基于专有的混合数据集,包括截至2023年8月互联网上公开可用的信息,以及第三方提供的非公开数据、数据标注服务和付费承包商提供的数据,还有内部生成的数据。这些初始响应通常包含有害和有毒的内容。Claude 3模型家族在推理、编码和问答任务上展现出卓越的性能,特别是在行业标准基准测试中取得了显著的提升,证明了其在处理复杂问题和提供准确答案方面的能力。

具身机器人和通用AI 2439

AgentScope 实战训练营-构建元规划智能体(Meta Planner Agent)—— 从 0 到 1 完整实现

本文介绍了基于AgentScope框架开发的元规划智能体(Meta Planner Agent)系统。该系统通过任务拆解和子代理编排机制,实现复杂任务的自动化处理。核心架构分为用户层、规划器层和子代理层,其中规划器作为"项目经理"负责任务分解、创建子代理并协调执行流程。关键技术包括AgentScope多智能体框架、DashScope大语言模型、PlanNotebook计划管理工具等。

program哲学 361

i茅台最新任务python脚本

从固定的 `header_context` 生成HTTP请求头,并加入用户的`userId`、`MT-Token`等动态信息,以模仿真实的请求。- 发送预约请求,提交商品和门店的参数,如 `sessionId`、`shopId`、`itemId` 等。- 定时任务:通过 `cron` 表达式 `0 0 9/21 * * *`,表示每月的9日和21日的0点执行。- `login`:使用验证码进行登录,并返回 `token` 和 `userId`。- 获取北京时间当天0点的时间戳,作为预约请求的时间参数。

三维点云技术探索 987

小米15修复“NV损坏” 去除主板校验电阻步骤解析与图示

小米15系列将搭载骁龙8至尊版处理器,采用台积电3nm工艺。文章分析了手机出现"NV损坏"故障的表现及修复方法,包括通信异常、系统启动问题等典型症状,并介绍了去除主板校验电阻和刷写工程固件两种修复方案。重点讲解了去除主板电阻后刷写QCN文件的操作流程,强调在维修过程中需要结合分析与思考。适用于小米15系列特定机型(24129PN74G/I/C)的硬件修复。

小马哥的专栏 315

【跳频通信】基于MATLAB的跳频通信系统仿真

同时,跳频通信也具有良好的抗干扰能力,即使有部分频点被干扰,仍能在其他未被干扰的频点上进行正常的通信。由于跳频通信系统是瞬时窄带系统,它易于与其他的窄带通信系统兼容,也就是说,跳频电台可以与常规的窄带电台互通,有利于设备的更新。跳频是最常用的扩频方式之一,其工作原理是指收发双方传输信号的载波频率按照预定规律进行离散变化的通信方式,也就是说,通信中使用的载波频率受伪随机变化码的控制而随机跳变。从通信技术的实现方式来说,“跳频”是一种用码序列进行多频频移键控的通信方式,也是一种码控载频跳变的通信系统。

FPGA/MATLAB学习教程/源码/项目合作开发 6267

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 【实战】ACM 选手图解 LeetCode 反转链表
下一篇: 【推荐】情人节,用程序员的浪漫表白~
编程文青李狗蛋
博客等级 码龄5年 27粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值