【Leetcode每日一题】 递归 - 反转链表(难度⭐)(36)

news2024/12/28 19:54:06

1. 题目解析

题目链接:206. 反转链表

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。

2.算法原理

一、递归函数的核心任务

递归函数的主要职责是接受一个链表的头指针,并返回该链表逆序后的新头结点。递归的核心思想在于将问题分解为更小的子问题,并通过解决这些子问题来最终解决整个问题。

二、函数体的实现步骤

  1. 递归调用:首先,函数会递归地调用自身,以逆序当前结点之后的链表部分。这意味着函数会不断地深入链表的尾部,直到达到递归的出口条件。

  2. 处理当前结点:在递归返回后,我们已经得到了逆序后的链表部分。此时,我们需要将当前的结点添加到这个逆序链表的末尾。由于链表是单向的,我们需要小心地处理指针的指向,确保新添加的结点能够正确地链接到逆序链表上。

三、递归出口条件

递归函数需要有一个明确的出口条件,以避免无限递归。在这个问题中,出口条件就是当前结点为空(即链表已经遍历到末尾)或者当前链表只有一个结点。在这两种情况下,不需要进行逆序操作,函数直接返回当前结点即可。

四、注意事项

在处理链表相关的问题时,务必注意指针的操作。链表是通过指针来连接各个结点的,因此指针的指向必须正确无误。为了更好地理解指针的操作和链表的结构,建议在解决问题时画图辅助思考。通过图形化的方式,可以更直观地理解链表的逆序过程,以及指针在逆序过程中的变化。

小tips

这个递归算法的思路是通过不断地将问题分解为更小的子问题,并利用递归调用解决这些子问题,最终完成整个链表的逆序操作。在实现过程中,需要注意指针的正确操作,并确保递归有明确的出口条件。通过画图辅助思考,可以更好地理解链表的结构和指针的操作过程。

3.代码编写

1.递归写法
/**
 * 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* reverseList(ListNode* head) 
    {
        if(head == nullptr || head->next == nullptr) return head;
        ListNode *h = reverseList(head->next);
        head->next->next = head;
        head->next = nullptr;
        return h;
    }
};
2.迭代写法
/**
 * 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* reverseList(ListNode* head) 
    {
        if(head == nullptr) 
        {
            return nullptr;
        }
        ListNode *pre = nullptr;
        ListNode *cur = head;
        ListNode *next = nullptr;

        while(cur->next != nullptr) 
        {
            next = cur->next;
            cur->next = pre;
            pre = cur;
            cur = next;
        }

        cur->next = pre;
        return cur;
    }
};

The Last

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1532110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

两台电脑简单的通信过程详解(局域网,同网段)

来源: https://www.bilibili.com/video/BV1BA411373b/ 一、原理 描述过程:分别以PC1、PC2、PC2、PC1的角度 二、eNSP测试 1.连接设备 2.查看PC1情况 3.打开抓包后,再ping一下PC2 4.PC1发送ARP报文 broadcast 意思为广播(IP都是f,意为255…

return code 1 from org.apache.hadoop.hive.ql.ddl.DDLTask

Bug信息 Error: Error while compiling statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.ddl.DDLTask (state=08S01,code=1)Bug产生的代码 修复hive表分区: msck repair table xxxBug原因排查 分区数量过大 这个是网上查看的说如果一次…

2024.3.21 如何将idea的注释设置为在首字母前开始而不是句首

2024.3.21 如何将idea的注释设置为在首字母前开始而不是句首 两种写法的差异 修改办法 将右下角的勾去掉即可。

redis关联和非关联

1.1.2.关联和非关联 传统数据库的表与表之间往往存在关联,例如外键: 而非关系型数据库不存在关联关系,要维护关系要么靠代码中的业务逻辑,要么靠数据之间的耦合: {id: 1,name: "张三",orders: [{id: 1,ite…

手拉手整合Springboot3+RocketMQ2.3

RocketMQ 基本概念 消息模型Message Model RocketMQ 主要由 Producer、Broker、Consumer 三部分组成,其中 Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Bro…

【报错】使用gradio渲染html页面无法加载本地图片

【报错】使用gradio渲染html页面无法加载本地图片 【报错】使用gradio渲染html页面无法加载本地图片[HTML] how to load local image by html output #884成功解决 【报错】使用gradio渲染html页面无法加载本地图片 在使用gradio框架渲染html页面,使用绝对路径&quo…

获取cookie

在Servlet9里设置cookie 在Servlet10里进行获取 访问Servlet9.do,再访问Servlet10.do

图书馆RFID(射频识别)数据模型压缩/解压缩算法实现小工具

1. 前言 最近闲来无聊,看了一下《图书馆射频识别数据模型第1部分:数据元素的设置及应用规则》以及《图书馆射频识别数据模型第2部分:基于ISO/IEC 15962的数据元素编码方案》,决定根据上面的编码方法实现一下该算法,于…

PyTorch 深度学习(GPT 重译)(五)

十二、通过指标和增强改进训练 本章涵盖 定义和计算精确率、召回率以及真/假阳性/阴性 使用 F1 分数与其他质量指标 平衡和增强数据以减少过拟合 使用 TensorBoard 绘制质量指标图 上一章的结束让我们陷入了困境。虽然我们能够将深度学习项目的机制放置好,但实…

聚类算法之层次聚类(Hierarchical Clustering)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 层次聚类是一种非常独特和强大的聚类方法,与众多其他的聚类技术相比,它不仅为数据集提供了一个划分,还给出了…

3d模型文件导入时没颜色---模大狮模型网

导入3D模型文件时没有颜色显示通常是由于软件在显示模型时未正确解释颜色信息。这可能是由于模型文件本身没有包含颜色信息,或者是软件在导入过程中未正确处理颜色数据所致。 以下是一些可能的解决方法: 检查3D模型文件:首先,确保…

网络简略总结

目录 一、三次握手 四次挥手 1、三次握手:为了建立长链接进行交互即建立一个会话,使用http/https协议 2、四次挥手是一个断开连接释放服务器资源的过程 3、如果已经建立了连接,但是客户端突然出现故障了怎么办? 4、谁可以中断连接?客户端还是服务端还是都可以? 5、…

Linux环境开发工具之vim

前言 上一期我们已经介绍了软件包管理器yum, 已经可以在linux上查找、安装、卸载软件了,本期我们来介绍一下文本编辑器vim。 本期内容介绍 什么是vim vim的常见的模式以及切换 vim命令模式常见的操作 vim底行模式常见的操作 解决普通用户无法执行sudo问…

5G智能网关助力工业铸造设备监测升级

随着物联网技术的迅猛发展和工业4.0浪潮的推进,传统工业正面临着严峻的转型升级压力。在这一背景下,铸造行业——这一典型的传统重工业领域,也必须积极探索借助5G、物联网、边缘计算等技术提升生产经营效率的新路径。 本文就基于佰马合作伙伴…

【晴问算法】提高篇—动态规划专题—最大连续子序列和

题目描述 输入描述 输出描述 输出一个整数&#xff0c;表示最大连续子序列和。 样例1 输入 6 -2 11 -4 13 -5 -2 输出 20 解释 连续子序列和的最大值为&#xff1a; #include<bits/stdc.h> using namespace std; const int MAXN 100; int dp[MAXN];//dp[i]表示以a[i]元…

酷开科技聚焦大屏端数据研究,构建酷开系统深度挖掘大屏商业价值

中国所有的彩色大屏中&#xff0c;智能电视规模已经过半&#xff0c;OTT平台的数据价值越发引起人们关注。作为OTT行业的头部代表&#xff0c;酷开科技一直聚焦大屏端数据研究&#xff0c;目前已经形成一套基于大屏指数的智慧营销体系&#xff0c;让OTT大屏的数字营销化水平实现…

无人机/飞控--ArduPilot、PX4学习记录(2)

这是一篇碎碎念&#xff0c;零零碎碎的记录了环境配置过程&#xff0c;仅供本人记录学习历程和参考。(记录的挺乱的&#xff0c;但是文章链接里的博客写的是真好) 本章主要完成的目标&#xff1a; 安装PX4 并 成功运行出3D无人机界面。 参考文章&#xff1a; 搭建PX4环境&…

【LeetCode-114.二叉树展开为链表】

题目详情&#xff1a; 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序…

水果软件FL Studio 21 for mac 21.2.3.3586破解版的最新版本2024介绍安装

音乐是人类最美好的语言&#xff0c;它能够跨越国界、文化和语言&#xff0c;将人们紧密地联系在一起。在当今数字化时代&#xff0c;音乐创作已经不再是专业人士的专利&#xff0c;越来越多的音乐爱好者开始尝试自己动手制作音乐。而FL Studio21中文版编曲软件正是这样一个为你…

软件架构对于项目质量的影响

时间&#xff1a;2024年03月20日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频地址&#xff1a; 软件架构对于项目质量的影响在线收听-喜马拉雅 前言 大家好&#xff0c;欢迎来到小蒋聊技术&#xff0c;小蒋准备和大家一…