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);

相关文章
|
5月前
|
算法 C++
算法笔记:递归(c++实现)
算法笔记:递归(c++实现)
|
1月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
18 0
LeetCode第二十四题(两两交换链表中的节点)
|
3月前
|
算法
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点
04_两两交换链表中的节点
04_两两交换链表中的节点
|
4月前
|
存储 C++
C++的list-map链表与映射表
```markdown C++ 中的`list`和`map`提供链表和映射表功能。`list`是双向链表,支持头尾插入删除(`push_front/push_back/pop_front/pop_back`),迭代器遍历及任意位置插入删除。`map`是键值对集合,自动按键排序,支持直接通过键来添加、修改和删除元素。两者均能使用范围for循环遍历,`map`的`count`函数用于统计键值出现次数。 ```
|
5月前
|
算法 C++ 容器
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
252 0
|
5月前
|
C++ Python
UE C++ 链表
UE C++ 链表
|
5月前
|
C++ 容器
【C++进阶】深入STL之list:高效双向链表的使用技巧
【C++进阶】深入STL之list:高效双向链表的使用技巧
59 0
|
5月前
24. 两两交换链表中的节点
24. 两两交换链表中的节点
|
5月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表