☆打卡算法☆LeetCode 24、两两交换链表中的节点 算法解析

举报
恬静的小魔龙 发表于 2021/12/09 17:40:00 2021/12/09
2.1k+ 0 0
【摘要】 推荐阅读CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群:1040082875大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。 一、题目 1、算法题目“将给定链表中相邻的节点交换,返回交换后的链表。”题目链接:来源:力扣(LeetCode)链接:24. 两两交换链表中的节点 - ...

推荐阅读

大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。

一、题目

1、算法题目

“将给定链表中相邻的节点交换,返回交换后的链表。”

题目链接:

来源:力扣(LeetCode)

链接:24. 两两交换链表中的节点 - 力扣(LeetCode) (leetcode-cn.com)

2、题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

image.png

示例 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;
    }
}

image.png

3、时间复杂度

时间复杂度 : O(n)

其中 n 是链表的节点数量。需要对每个节点进行更新指针的操作。

空间复杂度: O(n)

其中 n 是链表的节点数量。空间复杂度主要取决于递归调用的栈空间。

三、总结

继续引用那句话,递归就像学霸学习,看似什么都没做,其实都做完了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。