递归专题(3)——反转链表

🔥近津薪荼:个人主页

🎬个人专栏:《c语言基础知识详解》《c++基础知识详解》《Linux操作系统及网络基础知识分享》《近津薪荼的算法日迹》

✨体验生活,而不是演绎完美


1.上期参考代码

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if(l1==nullptr)return l2;
        if(l2==nullptr)return l1;
        if(l1->val<=l2->val)
        {
            l1->next=mergeTwoLists(l1->next,  l2);
            return l1;
        }else
        {
            l2->next=mergeTwoLists(l1,  l2->next);
            return l2;
        }

    }
};

2.本期知识点导图

3.本期要讲解的题目是:

反转链表

要点:

迭代与递归两种方法

本期的题目超级简单 ,主要是在让大家感受一下,递归的宏观写法和具体写法之间微妙的联系。

大家可以尝试自己先用递归写写看

4.解题

4.1迭代法:

cpp 复制代码
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* prev = nullptr;
        ListNode* curr = head;
        while (curr) {
            ListNode* next = curr->next;
            curr->next = prev;
            prev = curr;
            curr = next;
        }
        return prev;
    }
};

4.2递归

4.2.1宏观视角(把递归函数看成f)

重复子问题:反转链表
子问题具体需要解决什么:将已知的传来的头节点尾插到反转好的链表中(将head->next

扔给f,就不管了,只需要处理一个头结点的指向)

出口:head==nullptr(传来的时候就是空链表)或者head->next==nullptr

4.2.2具体视角

我们可以把链表看成特殊的树来看

(上一期也提到了递归与树的遍历逻辑的相似性),对树进行后序遍历(bfs),虽然处理方式相同,但要考虑所有节点的处理方式

大家自己动手写写代码,会发现两种视角写出来的代码是一模一样的,神奇不

5.下期要讲解的题目是:

两两交换链表中的节点

这题也非常简单,尝试做一做

相关推荐
小黄人软件9 分钟前
桌面需要整理吗?有工具自动分类
学习
老衲不用@飘柔41 分钟前
SFP与SFP+学习知识整理
学习
y1su1 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
X54先生(人文科技)1 小时前
社会嵌入式终身学习机器与修复时代-ELR架构和技术演化探讨
人工智能·深度学习·学习·架构·开源协议
residual_fan1 小时前
船用柴油机动态机动工况故障诊断:控制感知仿射网络(CAAN)的技术实现
人工智能·算法·数据挖掘·数据分析
电子云与长程纠缠2 小时前
UE5魂系游戏开发教程05
开发语言·学习·游戏·ui·ue5
syagain_zsx2 小时前
BRpc 二次封装:Channel 管理、服务管理与回调工厂
c++·学习·程序人生·rpc·谷歌
其实防守也摸鱼2 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全
我命由我123452 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
蓝悦无人机2 小时前
《Planning algorithms》读书笔记——第8章 反馈运动规划
算法·读书笔记·反馈运动规划