leetcode 24: 两两交换链表中的节点

LeetCode24两两交换链表中的节点 算法特点及适用场景特点利用递归的方法实现链表节点的两两交换操作,代码结构简洁明了,逻辑清晰,符合链表这种通过指针依次访问节点的数据结构特点,易于理解和实现。它能够准确地按照要求将链表中相邻的两个节点进行两两交换,保证了链表结构在交换后的正确性。时间复杂度为 ,在处理链表节点两两交换问题上具有较好的效率表现,只要链表的节点数量在可接受范围内,都能快速地完成交换操作。适用场景。 阅读详情

题目描述:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例1:
在这里插入图片描述

输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例2:
输入:head = []
输出:[]
示例3:
输入:head = [1]
输出:[1]
思路1:
!!!这两种被背下来就好了!!!
模拟的方式,充分利用python的赋值语法:

def swapPairs(self, head: ListNode) -> ListNode:
        result = ListNode()
        pre, pre.next = result, head
        while pre.next and pre.next.next:
            a = pre.next
            b = a.next
            a.next, b.next, pre.next = b.next, a, b
            pre = a
        return result.next

此时需要注意result的确定很巧妙,背下来就行了。
思路2:
递归

class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        if not head or not head.next:
            return head
        newHead = head.next
        head.next = self.swapPairs(newHead.next)
        newHead.next = head
        return newHead

这个递归是比较好理解的,首先是递归出口,然后交换两个相邻结点,head.next就是其newhead.next的交换完的结果(这里需要递归),然后newHead.next = head,然后返回后面部分的头结点。

递归的时间复杂度是O(n),空间复杂度也是O(n),空间复杂度有由递归深度确定。
迭代模拟的方式,时间复杂度是O(n),空间复杂度是O(1)。

【中等】力扣算法题解析LeetCode24:两两交换链表中的节点 该题目要求两两交换链表中的相邻节点,只能通过修改节点指针实现。使用虚拟头节点简化操作,通过三指针(pre、node1、node2)迭代完成交换:保存node2的后继节点,调整pre、node2、node1的指针关系,最后移动pre到下一组的前驱位置。时间复杂度O(n),空间复杂度O(1)。 阅读详情

相关推荐

TI C2000 DSP CLA实战:用F28069的协处理器实现ADC采样与PWM相位实时联动控制

本文详细介绍了如何利用TI C2000系列DSP的CLA协处理器在TMS320F28069上实现ADC采样与PWM相位的实时联动控制。通过CLA的零周期上下文切换和硬件级任务触发特性,显著提升了电机控制和数字电源应用的实时性能,特别适用于需要亚微秒级响应的场景。

weixin_30932215的博客 3968

Leetcode-24:两两交换链表中的节点

描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 /** * Definition for singly-linked list. * p...

LifeIsGood 286

华为防火墙双线路配置实战:5分钟搞定主备自动切换(含健康检查避坑指南)

本文详细介绍了华为防火墙双线路配置实战,包括主备自动切换和健康检查机制的优化技巧。通过智能健康检查机制,华为防火墙能实现毫秒级故障自动切换,确保网络高可用性。文章提供了从架构设计到实战配置的全流程指南,并分享了常见配置误区与解决方案,帮助中小企业快速搭建稳定可靠的网络架构。

weixin_30872337的博客 605

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

力扣原题:两两交换链表中的节点 思路解析:在此题目中要求只能交换节点,不能交换节点内部的值,说明需要对各个节点的next域的指向进行更改;假设此时有四个节点,需要将1、2节点交换,3、4节点交换,即是将1节点的前驱节点指向2节点,2节点指向1节点,1节点再指向3节点(2节点的后继节点)。 但是,在做题过程中任然需要考虑特殊情况:链表中是奇数节点或者只有一个节点甚至没有节点的情况。于是得出以下代码: public class Solution24 { public ListNode swapP

小型骷髅的博客 1461

Dr_can Kalman Filter学习笔记(一)

本文是在b站Dr_can的卡尔曼滤波课程学习过程中的学习笔记

苏大侠的博客 1051

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

24. 两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 这道题的重点在于对(前驱节点)哨兵节点的使用 1、首先让哨兵节点l1=heads 头哨兵节点 2、l2等于l1的指向 ,即节点1;现在l2就是节点1; 由于已经用l2记录下了l1的指向,所以开始对l1的指向操作,将l1的next指向节点2, l1.next = l2.next; 此时相当于节点1的指向已被...

weixin_56289362的博客 1120

ERA5数据批量下载

ERA5再分析数据的IDM接管下载

qq_38734327的博客 3034

【LeetCode刷题】24. 两两交换链表中的节点

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

weixin_48323589的博客 571

BSD盲区检测系统性能要求及试验方法

盲区监测系统BSD通过安装在车辆后方的两颗毫米波雷达实时监测驾驶员视野盲区,当发现视野盲区内出现其它道路使用者时,通过左右后视镜上的警示灯向驾驶员发出报警。

未知艺术家的博客 2359

完整版:ultralytics下运行yoloworld并训练

本文介绍了Ultralytics YOLO环境的快速配置与使用流程:1) 通过conda创建Python 3.9环境并安装依赖包;2) 配置中科大镜像源加速安装PyTorch和Ultralytics;3) 准备YOLO格式数据集并修改data.yaml配置文件;4) 提供模型预测、训练和验证的常用指令,包括predict/train/val等命令参数设置。文章还包含CLIP模型下载、权重文件获取以及本地安装等注意事项,完整覆盖了从环境搭建到模型部署的全过程。

weixin_50209871的博客 1344

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

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

qq_45848441的博客 359

AD(十四)调用已有的PCB元件封装库

软件:Altium Designer 16 需要资料:已有的PCB原理图文件(.PCBDOC)或者PCB库文件(.PCBLIB)(来源文中细说) 调用已有的PCB元件封装库(一)从已有的PCB原理图文件(*.PCBDOC)中调用1、PCB原理图文件来源2、打开已有的PCB原理图文件(*.PCBDOC)3、生成PCB封装库4、复制封装到工程文件下的PCB库文件(*.PCBLIB)5、重名问题(二)从已有的PCB库文件(*.PCBLIB)中调用1、PCB库文件(*.PCBLIB)的来源2、打开已有的PCB库 (

Curnane0_0的博客 5083

递归-24.两两交换链表中的节点-力扣(LeetCode)

我们的重复子问题就是将链表两两交换,需要一个ListNode*的参数,由于需要返回新的头指针,所以返回值类型是ListNode*。所以题目提供的函数可以拿过来用。

black_bear_white的博客 1039

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LeetCode24-两两交换链表中的节点

LeetCode24-两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 一、分析 创建一个额外的节点来保存下一个节点所指向的节点,这样就不会丢失节点 易错点1:直接使用头结点 return ...

lyd1995的博客 403

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

24. 两两交换链表中的节点(力扣LeetCode)

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]输入:head = []输出:[]输入:head = [1]输出:[1]

m0_73841621的博客 731

LeetCode 24 两两交换链表中的节点

LeetCode 24 两两交换链表中的节点 题目链接 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:head = [1] 输出:[1] 用两个链表结点每次取两个指针调换位置即可,AC代码如下: 在这里插入代码片 ...

旺崽的博客 2578

#力扣 LeetCode24. 两两交换链表中的节点 @FDDLC

题目描述: 24. 两两交换链表中的节点 - 力扣(LeetCode) (leetcode-cn.com) 自测用例: [1,2,3,4] [] [1] [1,2] [1,2,3] [1,2,3,4,5] [1,2,3,4,5,6] Java代码: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * List..

LiuXingchang的博客 311

24. 两两交换链表中的节点 - 力扣(LeetCode)

​ 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。​ 递归是一种将问题分解为更小子问题的方法。递归地进行同样的操作。最终,整个链表会通过递归调用被逐步交换完成。递归需要一个明确的终止条件,以避免无限递归。

q1111111da的博客 3980

LeetCode第 24 题:两两交换链表中的节点(C++)

24. 两两交换链表中的节点 - 力扣(LeetCode) 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 这题还是有点麻烦的,需要画图好好分析, 迭代 24. 两两交换链表中的节点_慢慢冲鸭子的博客,这位同学的图画的很好。 class Solution { public: ListNode* swapPairs(ListNode* head) { if(!head || !head->next) return head; ListNode

zj 306

【LeetCode 24】两两交换链表中的节点

【LeetCode 24】两两交换链表中的节点 文章目录【LeetCode 24】两两交换链表中的节点题目描述思路代码总结 题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 例如: 给定 1->2->3->4, 你应该返回 2->1->4->3. 思路 才看到题,想到的是一种传统...

weixin_44522586的博客 188

leetcode24-----两两交换链表中的节点

24. 两两交换链表中的节点 - 力扣(LeetCode)给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例 1:[2,1,4,3]示例 2:head = [][]示例 3:head = [1][1]链表中节点的数目在范围[0, 100]内。

xinxin的博客 2578

24.力扣LeetCode_两两交换链表中的节点

本文介绍了两种交换链表中相邻节点的方法:三指针法和递归法。三指针法通过虚拟头节点统一处理边界条件,使用三个指针定位和交换节点对,逐步推进完成整个链表的交换。递归法则将问题分解为子问题:先处理后续节点对,再交换当前节点对,最后拼接结果。两种方法的时间复杂度均为O(n),但递归法空间复杂度为O(n)(递归栈),而三指针法为O(1)。三指针法适合大规模数据,递归法代码更简洁但要注意栈溢出风险。两种实现都正确处理了奇数长度链表的边界情况。

2401_82472941的博客 1172

golang力扣leetcode 24.两两交换链表中的节点

24.两两交换链表中的节点24.两两交换链表中的节点题解代码 24.两两交换链表中的节点 24.两两交换链表中的节点 题解 两种解法,第一种递归第二种迭代,链表题建议画图做 代码 package main type ListNode struct { Val int Next *ListNode } func swapPairs1(head *ListNode) *ListNode { if head == nil || head.Next == nil { return head }

清风 628

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

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

liuxudanhahaha的博客 1290

【每日一道LeetCode】LeetCode24:两两交换链表中的节点

本文介绍了两种交换链表中相邻节点的方法:1.迭代法:创建虚拟头节点和临时节点,通过三步操作完成节点交换;2.递归法:先处理后续节点,再交换当前相邻节点。两种方法都保持了节点值不变,仅改变指针指向。迭代法使用虚拟头节点简化操作,递归法则通过递归调用实现交换。时间复杂度均为O(n),空间复杂度迭代法为O(1),递归法为O(n)。

BeingACoder的博客 7591
上一篇: leetcode 206、24:链表相关习题
下一篇: 剑指 Offer 53 - I. 在排序数组中查找数字 I
coding_diamond
博客等级 码龄8年 8粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值