打卡算法 24两两交换链表中的节点 算法解析
Posted 恬静的小魔龙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打卡算法 24两两交换链表中的节点 算法解析相关的知识,希望对你有一定的参考价值。
推荐阅读
大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。
一、题目
1、算法题目
“将给定链表中相邻的节点交换,返回交换后的链表。”
题目链接:
来源:力扣(LeetCode)
链接:24. 两两交换链表中的节点 - 力扣(LeetCode) (leetcode-cn.com)
2、题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MeaiTuWm-1658998642013)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1057fd97c9aa4c499f879d8b2a4a83ad~tplv-k3u1fbpfcp-watermark.image?)]
示例 1:
输入: head = [1,2,3,4]
输出: [2,1,4,3]
示例 2:
输入: head = [1]
输出: [1]
二、解题
1、思路分析
这个题可以采用递归的方式实现链表中相邻节点的交换。
递归的终止条件是链表中没有节点,或者链表中只有一个节点,这个时候无法进行交换。
那么接下来就是交换了,比如,链表中有两个节点,在交换节点后,原链表的头结点就变成新链表的第二个节点,原链表的第二个节点变成新链表的头结点。
其余节点递归地实现,递归地两两交换后,更新节点之间的指针关系,即可完成整个链表的交换。
2、代码实现
代码参考:
public class Solution
public ListNode SwapPairs(ListNode head)
//递归结束判断
if (head?.next == null)
return head;
//替换
var val = head.next.val;
head.next.val = head.val;
head.val = val;
//递归
SwapPairs(head.next.next);
return head;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3FHSOyuF-1658998642015)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/502317d6ac4242b3bd03a26740c1f464~tplv-k3u1fbpfcp-watermark.image?)]
3、时间复杂度
时间复杂度 : O(n)
其中 n 是链表的节点数量。需要对每个节点进行更新指针的操作。
空间复杂度: O(n)
其中 n 是链表的节点数量。空间复杂度主要取决于递归调用的栈空间。
三、总结
继续引用那句话,递归就像学霸学习,看似什么都没做,其实都做完了。
以上是关于打卡算法 24两两交换链表中的节点 算法解析的主要内容,如果未能解决你的问题,请参考以下文章
☆打卡算法☆LeetCode 24两两交换链表中的节点 算法解析
算法leetcode|24. 两两交换链表中的节点(rust重拳出击)