java数据结构与算法刷题-----LeetCode24. 两两交换链表中的节点

【经典算法】LeetCode24. 两两交换链表中的节点(Java/C/Python3/Golang实现含注释说明,中等) 方式优点缺点时间复杂度空间复杂度其他迭代法(使用哑节点)代码简洁,易于理解需要额外的哑节点O(n)O(1)适用于链表头部处理迭代法(不使用哑节点)不需要额外空间(除了变量)处理链表头部时稍复杂O(n)O(1)需特别注意链表头部的变化递归法代码优雅,易于理解可能存在栈溢出风险,空间效率不如迭代法O(n)O(n)(递归栈空间)适用于链表长度较短的情况在以上三种方式中,迭代法(不使用哑节点)和递归法都是直接对原链表进行操作,不需要额外的节点空间(除了必要的变量)。 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

解题思路
  1. 三指针法:p指针表示pre结点,永远指向要操作结点的前驱。left指针指向要两两交换结点的左边那个,right指针指向右边那个,然后交换即可。
  2. head头结点,只要链表元素个数>=2个,那么head结点最终一定指向第二个结点,因为两两交换,第一个head和第二个元素交换了位置,第二个结点一定会成为新的头结点。
  3. 每次交换完成后,下一次p结点正好是left结点交换完成之后的位置,具体如下图所示:
    在这里插入图片描述
    在这里插入图片描述
代码:时间复杂度O(n) 空间复杂度O(1)

在这里插入图片描述

/**
 * 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; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head==null || head.next == null) return head;//如果不够两个结点,就无需交换
        ListNode p = new ListNode();//p结点,p.next指向我们要操作的结点。因为单链表,当前结点需要前一个结点.next来操作当前结点
        ListNode left = null,right = null;//left指向两两交换左边那个,right指向右边那个
        p.next = head;//单链表,需要 前一个结点.next 来操作当前结点。首先操作头结点
        head = head.next;//只要够两个结点,最终头结点,一定是第二个结点
        while(p.next != null && p.next.next!=null){
            //进行交换。然后p指向下一次需要交换的前一个结点
            left = p.next; right = p.next.next;//left指向左边,right指向右边,两个元素需要交换
            //常见的的单链表交换3步曲
            p.next = right;
            left.next = right.next;
            right.next = left;
            //最终指向下一次p结点应该在的位置
            p = left;
        }
        return head;
    }

}
【26美赛D题】2026美赛数学建模(MCM/ICM)思路解析及代码分享 2026美赛D题数学建模竞赛思路解析摘要:本文针对美赛D题提供系统性解决方案,提出四层建模框架(数据层、机理层、模型层、决策层),强调逻辑闭环比模型复杂度更重要。包含通用建模步骤:指标体系构建、状态评估、动态预测和策略优化,并给出Python基础代码框架。论文建议采用七段式结构,突出从现实问题到决策方案的完整闭环。核心在于通过数据驱动方法揭示问题规律,结合多源数据整合、系统行为建模和风险评估,最终形成可落地的决策建议,体现数学建模解决实际问题的能力。 阅读详情

相关推荐

不用敲命令!用宝塔面板可视化部署pbootCMS的保姆级教程(2024最新版)

本文提供2024年最新版pbootCMS可视化部署教程,全程使用宝塔面板操作,无需任何命令行知识。从服务器初始化、LNMP环境配置到源码上传、安装向导,手把手指导用户通过图形化界面快速搭建专业网站,适合零基础新手和追求高效建站的用户。

weixin_42509507的博客 491

【LeetCode刷题日记:24】两两交换链表

本文讲解了LeetCode24题「两两交换链表节点」的两种解法。第一种使用虚拟头节点迭代法,通过三个步骤完成节点交换:1)将前驱节点指向第二个节点;2)将第二个节点指向第一个节点;3)将第一个节点指向后续节点。第二种采用递归法,从链表尾部开始交换,每次递归返回交换后的头节点。文章配有详细图解,说明交换过程中指针的变化,特别强调了虚拟头节点的作用和递归调用的执行流程。两种方法的时间复杂度均为O(n),空间复杂度迭代法为O(1),递归法为O(n)。关键点在于正确处理节点指针的指向顺序,避免空指针异常。

任岁月风干理想再也找不回真的我 5460

CoppeiaSim(VREP)入门

vrep/CoppeliaSim关节抖动问题原因总结【Coppeliasim|轨迹规划(一)】设置机械臂的关节角时保证机械臂不散架设置机械臂的关节角时保证机械臂不散架。

weixin_50624597的博客 3228

Java实现 LeetCode 24 两两交换链表中的节点

24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/swap-nodes-in-pa...

南 墙 1万+

lstm如何输入多维序列_深度学习也可以做时间序列异常诊断

最近在看的一篇论文里,用到了GRU、VAE等技术来做多维时间序列异常诊断。那么今天首先来聊一聊深度学习的基础知识,然后简单说一下论文。以下基础知识部分的内容,主要来源于李宏毅老师的课程。有兴趣的可以去看李老师的课程哦https://www.bilibili.com/video/BV1JE411g7XF?p=1 1、GRU(Gate Recurrent Unit):GRU是循环神经网络(Recurr...

weixin_30899789的博客 2835

【NLP】语言模型的发展历程 (1)

N-gram模型是一种基于统计语言模型的文本分析算法,它用于预测文本中下一个词出现的概率,基于前面出现的n-1个词的序列。这里的n代表序列中元素的数量,因此称为N-gram。Unigram:N=1,每个单词的出现概率独立计算,不考虑上下文。Bigram:N=2,基于前一个单词预测当前单词的联合概率模型。Trigram:N=3,考虑前两个单词来预测当前单词的联合概率模型,更复杂但可能更准确。

酒酿小圆子呀~ 1670

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

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

Coder_ljw的博客 1371

【Docker】掌握 Docker魔法:Windows 11 平台上的完美容器部署终极指南

【Docker】掌握 Docker魔法:Windows 11 平台上的完美容器部署终极指南 一文搞懂什么是 Docker?分析容器的工作原理、容器的架构、Docker的优势、使用 Docker的原因。 全程手把手教你Docker的安装与使用,配置阿里云镜像加速、容器常用命令!

寸铁的博客 10万+

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

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

旺崽的博客 2578

ABB机器人发送实时位置给PLC

本文使用中断方式实现,多任务要订购ABB功能包 Profinet总线组变量配置 注:映射为16位和32位均可用 声明数据 VAR num CurrentExAxisPos;!外轴位置 VAR robtarget pCurrentPos;!实时位置 var intnum TrapNum;!中断号 初始化开中断 IDelete TrapNum;!中断号 CONNECT TrapNum WITH iTrapCurPos;!连接中...

澍澍爸的blog 6781

42、InfiniBand技术详解:QP状态机、操作及错误处理

本文深入解析InfiniBand技术中的核心组件QP(Queue Pair)状态机、工作请求处理机制、支持的操作类型及错误处理策略。详细介绍了QP的创建与状态转换流程,包括INIT、RTR、RTS等关键状态,并提供了状态修改的代码示例。文章还探讨了工作请求的发布、资源使用限制、围栏机制以及重试和RNR流程,帮助开发者理解通信可靠性保障机制。此外,涵盖了多播组的应用场景与API使用方法,并对比了用户空间与内核级RDMA API的调用差异,最后给出了实践建议和常见问题解答,为构建高性能分布式系统提供技术指导。

oauth7security的博客 133

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

本文介绍了如何通过虚拟头节点和节点删除/插入操作实现链表节点的两两交换。主要思路是:1)创建虚拟头节点简化头节点处理;2)遍历链表时定位相邻两个节点;3)删除第一个节点并插入到第二个节点之后;4)移动指针重复该过程。通过图解展示了交换过程,并提供了Java实现代码,使用虚拟头节点和指针操作高效完成节点交换,最终返回新链表头节点。

m0_73939789的博客 4212

GEE:提取研究区 NDVI/LST/RVI 并进行时间序列线性插值填补缺失像素和Savitsky-Golay(SG)滤波平滑处理

养乐多_本文将介绍使用Landsat数据集,构建时间序列,并使用线性插值算法填补缺失数据,或者去云空洞,并进一步对完整的时间序列数据进行SG滤波处理。

养乐多的博客 3200

Java详解LeetCode 热题 100(30):LeetCode 24. 两两交换链表中的节点(Swap Nodes in Pairs)详解

*** 单链表节点的定义*/int val;// 节点的值// 指向下一个节点的指针// 无参构造函数// 带值的构造函数// 带值和下一个节点的构造函数第一步:理解基础概念掌握链表的基本结构和操作理解指针和引用的概念学会画图分析链表操作过程第二步:掌握基础解法先实现迭代法,理解指针操作的步骤学会使用哨兵节点简化边界处理掌握调试技巧,学会验证每一步操作第三步:学习高级技巧理解递归法的优雅实现学会分析递归的时间和空间复杂度对比不同解法的优缺点。

yk_dflkg的博客 1268

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

BeingACoder的博客 7591

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

算法:链表-41-两两交换链表中的节点-LeetCode24

weixin_43873121的博客 921

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

lyd1995的博客 403

LeetCode Java面试刷题笔记汇总

LeetCode Java刷题笔记汇总,按照类型刷题效率更高。

终生学习践行者 2948

Leetcode : 24. 两两交换链表中的节点 Java实现 算法之旅

Leetcode : 24. 两两交换链表中的节点(medium) 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 解题思路 使用一个前继节点来记录两两交换之后的第二个节点,这样在每次交换之前就可以将...

qq_38765867的博客 520

【力扣算法】24-两两交换链表中的节点

题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 题解 无官方题解 感觉很简单 执行用时 : 0 ms, 在Swap Nodes in Pairs的Java提交中击败了100.00% 的用户 内存消耗 : 3...

ZeromaXHe的博客 767

刷题计划 day3 【移除链表元素,反转链表,交换链表中的节点】链表上

⚡刷题计划day3继续,可以点个免费的赞赞哦,往期可看专栏,关注不迷路,您的支持是我的最大动力🌹~

weixin_72499901的博客 804

算法leetcode|24. 两两交换链表中的节点(rust重拳出击)

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

二当家的白帽子 1031

LeetCode 24. 两两交换链表中的节点 【c++/java详细题解】

目录1、题目2、思路3、c++代码4、java代码 1、题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:head = [1] 输出:[1] 提示: 链表中节点的数目在范围 [0, 100] 内 0 <= Node.val <= 100 2、思路 (模拟) O

林深不见鹿 的博客 1436

leetcode -24 -两两交换链表中的节点 -java版

文章目录题目代码 题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 代码 /* * @lc app=leetcode.cn id=24 lang=java * * [24] 两两交换链表中的节点 */ // @lc code=start /** * Definition for singly-linked l

lingle1的博客 399

Leetcode[链表] 24. 两两交换链表中的节点

Leetcode[链表] 24. 两两交换链表中的节点审题代码实现反思 审题 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:head = [1] 输出:[1] 看到这道题,说实话,看一眼都知道题解该咋写了。但是做了50min并忍不住看题解后发现,大佬确实可以看一眼就知道咋写,勤勤

weixin_45415929的博客 255
上一篇: java数据结构与算法刷题-----LeetCode769. 最多能完成排序的块
下一篇: java数据结构与算法刷题-----LeetCode19. 删除链表的倒数第 N 个结点
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值