news 2026/5/11 13:43:13

030两两交换链表中的节点

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
030两两交换链表中的节点

两两交换链表中的节点

题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/description/?envType=study-plan-v2&envId=top-100-liked

我的解答:

public ListNode swapPairs(ListNode head) { if(head==null||head.next==null){ return head; } ListNode dummy = new ListNode(-1,head); ListNode pre=dummy; ListNode left=head, right=head.next; while(right!=null){ left.next=right.next; right.next=left; pre.next=right; pre=left; left=left.next; if(left!=null){ right=left.next; } else{ right=null; } } return dummy.next; }

分析:代码的时间复杂度为O(n),空间复杂度为O(1)。解题思路:在链表头节点添加一个哑节点,避免单独处理边界情况。使用三个指针,left和right为当前交换的一对左右节点,pre为当前交换的一对节点的前置节点。每次先将左右节点进行交换,然后更改前置节点的下一个节点,移动时先移动pre,再移动left和right。

看了官方题解后的解答:

//方法一:递归 //实践复杂度:O(n) //空间复杂度:O(n) public ListNode swapPairs(ListNode head) { if(head==null||head.next==null){ return head; } ListNode newHead=head.next; head.next=swapPairs(newHead.next); newHead.next=head; return newHead; } //方法二:迭代 //实践复杂度:O(n) //空间复杂度:O(1) public ListNode swapPairs(ListNode head) { ListNode dummyHead = new ListNode(-1,head); ListNode pre=dummyHead; ListNode node1, node2; while(pre.next!=null&&pre.next.next!=null){ node1=pre.next; node2=pre.next.next; node1.next=node2.next; node2.next=node1; pre.next=node2; pre=node1; } return dummyHead.next; }

分析:

​ 1、方法一采用递归。链表节点两两一组进行交换,若一组节点不足两个,则不用交换直接返回。不断递归交换每一组节点,每一次递归交换完成后返回新的头节点作为上一组交换完成后第二个节点的后置节点。

​ 2、方法二采用迭代。添加一个哑节点避免单独处理边界情况,temp作为每一组交换节点的前置节点,根据temp定位两个需要交换的节点,然后交换指针,使得节点关系从temp—>node1—>node2变为temp—>node2—>node1,再令temp=node1,即可定位下一组进行交换的节点,重复此过程直到不存在节点或者只剩一个节点。

​ 3、我的解答思路与官方解答的方法二一致,只不过实现上有所出入。

总结

  • 本题可以采用递归和迭代两种方法。
  • 递归每次返回每组交换后节点的第一个节点,连接到上一组交换后第二个节点的末尾即可。
  • 迭代通过前置节点定位一组进行交换的两个节点,然后更改节点之间关系,直到不存在节点或者只剩一个节点。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 13:42:33

2026 年的 AI 床垫居然能从被动承托升级为主动守护?

在科技飞速发展的当下,AI 床垫已成为家居领域的新宠。2026 年,AI 床垫更是实现了从被动承托到主动守护的重大升级。今天,我们就来深入了解一下这一变革,以及 HEKA 黑卡 AI 床垫在其中的卓越表现。AI 床垫:从被动到主动…

作者头像 李华
网站建设 2026/5/11 13:42:13

3分钟掌握Layerdivider:将任意图像智能转换为PSD分层的终极指南

3分钟掌握Layerdivider:将任意图像智能转换为PSD分层的终极指南 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 想象一下,你有一张…

作者头像 李华
网站建设 2026/5/11 13:42:02

App无辜被下架?手把手教你搞定腾讯手机管家误报(附申诉全流程)

应用被误判为病毒?腾讯手机管家申诉全流程指南 看着自己辛苦开发的应用突然被应用商店下架,屏幕上赫然显示"检测到病毒风险"的提示,那种感觉就像精心准备的大餐被无故打翻。更令人沮丧的是,这很可能只是一场误报。作为…

作者头像 李华
网站建设 2026/5/11 13:38:56

JPEXS Flash Decompiler:革新Flash逆向工程的全能解决方案

JPEXS Flash Decompiler:革新Flash逆向工程的全能解决方案 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 在数字遗产保护与技术迁移的浪潮中,Flash技术的遗留资…

作者头像 李华
网站建设 2026/5/11 13:36:47

CANN Ascend C压缩索引加载API

LoadUnzipIndex 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode…

作者头像 李华
网站建设 2026/5/11 13:36:47

Inter字体性能优化终极指南:5个高效策略提升网页加载速度

Inter字体性能优化终极指南:5个高效策略提升网页加载速度 【免费下载链接】inter The Inter font family 项目地址: https://gitcode.com/gh_mirrors/in/inter Inter字体作为专为计算机屏幕设计的现代无衬线字体,凭借其出色的可读性和丰富的字重选…

作者头像 李华