C++递归解决两两交换链表中节点

简介: C++递归解决两两交换链表中节点

C++递归解决两两交换链表中节点

📟作者主页:慢热的陕西人

🌴专栏链接:力扣刷题日记

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言


题目描述

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

解题思路

这一题的思路和上一道题反转链表的思路十分类似:

首先我们编写递归终止的条件:

if(head == nullptr || head->next == nullptr)
        return head;
//当我们遇到一个只有一个节点的指针我们不进行交换直接返回head即可,同样的空链表也是同样的情况

首先我们坚信ListNode* swapPairs(ListNode* head) 函数可以帮我们解决掉head->next->next及之后节点的交换问题:

那么我们只需要交换前两个节点并返回head->next即可

ListNode* ret = swapPairs(head->next->next);
        ListNode* hn = head->next;
        head->next->next = head;
        head->next = ret;
        return hn;

以上就是整道题的思路了

代码

lass Solution {
public:
    ListNode* swapPairs(ListNode* head) 
    {
        if(head == nullptr || head->next == nullptr)
        return head;
        ListNode* ret = swapPairs(head->next->next);
        ListNode* hn = head->next;
        head->next->next = head;
        head->next = ret;
        return hn;
    }
};

复杂度分析

时间复杂度

相当于深度优先遍历链表:O(N);

空间复杂度

没有额外使用空间O(1);

相关文章
|
1月前
|
算法
【优选算法专栏】专题九:链表--------两两交换链表中的节点
【优选算法专栏】专题九:链表--------两两交换链表中的节点
17 0
|
2月前
|
C++
【链表】还不会用C++实现链表?一文教会你各种链表的实现
【链表】还不会用C++实现链表?一文教会你各种链表的实现
|
1月前
|
算法
算法系列--递归(一)--与链表有关(上)
算法系列--递归(一)--与链表有关
28 0
链表遍历,链表查找和统计节点,链表插入新节点,链表删除节点,链表修改指定节点,链表头插法,尾插法总结
链表遍历,链表查找和统计节点,链表插入新节点,链表删除节点,链表修改指定节点,链表头插法,尾插法总结
|
13天前
|
存储 Java
高效删除链表倒数节点最优实现
要删除链表的倒数第 n 个节点,并返回链表的头节点,我们可以使用一趟扫描的方法来实现。这个方法涉及使用两个指针:快指针和慢指针。
|
1月前
|
存储 缓存 C++
C++链表常用的函数编写(增查删改)内附完整程序
C++链表常用的函数编写(增查删改)内附完整程序
|
2月前
|
存储 算法 C语言
【C/C++ 链表结构】探索链表迭代器:C++实现的深入分析与优化策略
【C/C++ 链表结构】探索链表迭代器:C++实现的深入分析与优化策略
42 0
|
存储 算法 程序员
深入理解 C++ 自定义链表中实现迭代器
深入理解 C++ 自定义链表中实现迭代器
59 0
|
2月前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解