C++反转链表递归

简介: C++反转链表递归

C++反转链表递归

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

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

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


题目描述

LCR 024. 反转链表 - 力扣(LeetCode)

给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。

解题思路

这里我们采用递归的思路来解决首先我们分为两个视角来查看问题:

①宏观的视角

首先我们坚信reverseList(ListNode* head)这个函数可以帮我们逆置链表;

所以我们第一步reverseList(head->next);

head->next->next = head;

head->next = nullptr;

最后我们返回链表的头指针即可

②将链表看成一棵树的视角

简单说就是第一个视角的展开,我们先递归到最深层:

逆置操作:

继续:

最后:

总结:

如果我们把单链表看成一棵树我们仅需进行深度优先遍历即可。

代码

class Solution {
public:
    ListNode* reverseList(ListNode* head) 
    {
        if(head == nullptr)
        return head;
        if(head->next == nullptr)
        return head;
        ListNode* NewHead = reverseList(head->next);
        head->next->next = head;
        head->next = nullptr;
        return NewHead;
    }
};

复杂度分析

时间复杂度:

只遍历了一次相当于O(N);

空间复杂度:

没有额外使用O(1);

相关文章
|
4天前
|
C++
【链表】还不会用C++实现链表?一文教会你各种链表的实现
【链表】还不会用C++实现链表?一文教会你各种链表的实现
汉诺塔问题(递归)/梵塔问题c++
汉诺塔问题(递归)/梵塔问题c++
|
4天前
|
设计模式 中间件 程序员
【C/C++ 奇异递归模板模式 】C++中CRTP模式(Curiously Recurring Template Pattern)的艺术和科学
【C/C++ 奇异递归模板模式 】C++中CRTP模式(Curiously Recurring Template Pattern)的艺术和科学
26 3
|
4天前
|
算法
算法系列--递归(一)--与链表有关(上)
算法系列--递归(一)--与链表有关
28 0
|
4天前
|
C++
C++ 递归与面向对象编程基础
C++ 递归是函数自我调用的技术,用于简化复杂问题。以递归求和为例,`sum` 函数通过不断调用自身累加数字直到 `k` 为 0。递归需谨慎,避免无限循环和资源浪费。面向对象编程(OOP)将程序划分为交互对象,具有属性和方法,提升代码复用、维护和扩展性。C++ OOP 基本概念包括类、对象、属性和方法。通过创建类和对象,利用点语法访问成员,实现代码组织。
24 0
|
4天前
|
存储 缓存 C++
C++链表常用的函数编写(增查删改)内附完整程序
C++链表常用的函数编写(增查删改)内附完整程序
|
4天前
|
存储 算法 C语言
【C/C++ 链表结构】探索链表迭代器:C++实现的深入分析与优化策略
【C/C++ 链表结构】探索链表迭代器:C++实现的深入分析与优化策略
42 0
|
4天前
|
存储 算法 程序员
深入理解 C++ 自定义链表中实现迭代器
深入理解 C++ 自定义链表中实现迭代器
60 0
|
4天前
|
存储 算法 Linux
【C/C++ 线性表】C++ 从零开始实现 双向循环链表(Exploring Doubly Circular Linked List in C++)
【C/C++ 线性表】C++ 从零开始实现 双向循环链表(Exploring Doubly Circular Linked List in C++)
67 0