【LeetCode】206. 反转链表(简单)——代码随想录算法训练营Day01

题目链接:206. 反转链表

题目描述

206. 反转链表

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

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]


提示:

链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000

文章讲解:代码随想录

视频讲解:帮你拿下反转链表 | LeetCode:206.反转链表 | 双指针法 | 递归法_哔哩哔哩_bilibili

题解1:双指针

思路:一个指针指向当前节点,另一个指针指向上一个节点,用一个变量存储下个节点的位置,遍历链表的过程中反转链表。

/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} head* @return {ListNode}*/
var reverseList = function(head) {let pre = null, cur = head; // cur 指向当前节点,pre 指向上一个节点while (cur) {const temp = cur.next; // 临时存储下个节点位置cur.next = pre; // 反转当前节点pre = cur; // 更新 precur = temp; // 更新 cur}return pre; // pre 即为反转后链表的头节点
};

分析:遍历一次链表,时间复杂度为 O(n),空间复杂度为 O(1)。

题解2:双指针递归

思路:使用双指针法的思路,从左到右一边遍历一边反转链表。反转当前节点和上一个节点,再递归的反转下一个节点。

递归解析:

  • 函数功能:传入上一个节点和当前节点,反转整个链表。
  • 结束条件:当前节点指向 null,即已反转整个链表。
  • 递归关系:反转当前节点和上一个节点,继续递归的反转当前节点和下一个节点,即可反转整个链表。
/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} head* @return {ListNode}*/
var reverseList = function(head) {const reverse = function(pre, cur) {// cur 指向当前节点,pre 指向上一个节点// cur 为空时,递归结束,返回 pre 为头节点if (cur === null) {return pre;}// cur 不为空时,执行反转操作const temp = cur.next; // 临时存储下个节点位置cur.next = pre; // 反转当前节点return reverse(cur, temp); // 执行函数反转链表的剩余部分};return reverse(null, head);
};

分析:递归的遍历了一次整个链表,同时调用了 n 层栈空间,时间复杂度为 O(n),空间复杂度为 O(n)。

题解3:暴力递归

思路:当链表为空链表或只有1个元素时,反转后的链表即为它本身。链表元素大于1个时,需要反转第1个元素和剩余部分反转后的链表的最后一个元素(即反转前链表的第2个元素)。

递归解析:

  • 函数功能:传入链表头节点,返回反转后的链表。
  • 结束条件:链表为空链表或只有1个元素,返回这个链表的头节点。
  • 递归关系:反转一个链表,先反转第2个节点即之后的部分(即除头节点外的部分),再反转头节点和剩余部分链表反转后的尾节点(即第2个节点),即可完成链表反转。
/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} head* @return {ListNode}*/
var reverseList = function(head) {// 如果链表为空链表(即 head 指向 null)或只有一个元素,返回 headif (head === null || head.next === null) {return head;}// 递归反转第1个节点后的剩余链表const start = reverseList(head.next); // start 为反转后的链表的头节点// 反转第1个节点和第2个节点,第2个节点即反转后的链表的尾节点head.next.next = head;head.next = null;return start;
};

分析:递归的遍历了一次整个链表,同时调用了 n 层栈空间,时间复杂度为 O(n),空间复杂度为 O(n)。

收获

1. 学会了反转链表的多种方法,本质上是用双指针的思想,用两个指针分别指向当前元素和上一个元素,再使用临时变量存储下一个元素的位置。

2. 学会了使用递归的思想解决问题,题解2和题解3都是使用的递归的思想。区别在于题解2的思路是在正向的遍历链表的过程中同时反转链表,而题解3的思路是先遍历到链表尾,遍历途中在递归栈中存储每个节点的信息,再从链表尾部开始向头部反转链表。

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

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

相关文章

fastadmin 框架如何移除图片上传后预览中的删除按钮

在FastAdmin中&#xff0c;当我们启用了图片上传预览时&#xff0c;在预览区域会自动生成预览图和删除按钮&#xff0c;如下图&#xff1a; 如果我们想上移除掉这里的删除按钮&#xff0c;则需要启用自定义预览模板的功能。 首先我们找到视图中我们的预览容器&#xff0c;比如…

【排序算法】插入排序与希尔排序,你不想知道为什么希尔比插入更快吗?

文章目录 &#x1f680;前言&#x1f680;插入排序&#xff08;insertsort&#xff09;✈️原理✈️代码实现&#xff08;coding&#xff09; &#x1f680;总结&#x1f680;希尔排序&#xff08;shellsort&#xff09;✈️代码实现&#xff08;coding&#xff09;✈️为啥希尔…

Fast.ai

网址&#xff1a;https://colab.research.google.com/ https://colab.research.google.com/notebooks/gpu.ipynb#scrollTotMce8muBqXQP 克隆此存储库后&#xff0c;请确保您已 nbdev_install_hooks在终端中运行。这将安装 Jupyter 和 git hooks 以自动清理、信任和修复笔记本中…

Angular - 笔记

文章目录 语法属性绑定引用模板变量组件绑定父组件传子组件 input子组件传父组件 outputEventEmitter ViewChildViewChildren获取子组件对象列表 管道常用模块 函数localStorage实现数据持久化简介使用 参考文档 语法 属性绑定 Angular 的双向绑定语法是方括号和圆括号的组合 …

Unity填坑-灯光烘焙相关

Unity填坑-灯光烘焙相关 文章目录 Unity填坑-灯光烘焙相关前言一、Light的模式二、光的效果分类三、各种Light模式与烘焙的说明1.Realtime,实时光2.baked,烘焙光3.mixed,混合 四、实时全局光五、其他说明1.动态物体的全局光照效果2.手机使用烘焙注意的点3.其他设置 前言 项目组…

GB28181/GB35114平台LiveGBS何如添加白名单,使指定海康、大华、华为等GB28181摄像头或录像机设备可以免密接入

1、什么是GB/T28181级联 协议定义中的解释如下&#xff1a; 级联 cascadednetworking 两个信令安全路由网关之间按照上下级关系连接,上级中心信令控制服务器通过信令安全路由网 关可调用下级中心信令控制服务器所管辖的监控资源,下级中心信令控制服务器通过信令安全路由网 关向…

(26)Linux 进程通信之共享内存(共享储存空间)

共享内存是System V版本的最后一个进程间通信方式。共享内存&#xff0c;顾名思义就是允许两个不相关的进程访问同一个逻辑内存&#xff0c;共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一…

端侧AI的“春风化雨手”,翻开中国科技下一页

大模型是一年多来全球科技圈的最大热点&#xff0c;手机厂商想要借助大模型的锋芒&#xff0c;打造高端形象&#xff0c;获得新的增长&#xff0c;这无可厚非。 不过&#xff0c;大家注意到没有&#xff0c;越是“AI强者”&#xff0c;对待大模型越举重若轻。 简单来说&#xf…

43-函数的声明定义,函数表达式定义,函数的调用,声明提升,参数,形参,实参

1.函数声明定义 function 函数名(){} 2.函数表达式定义 匿名式函数表达式 var 函数名 function(){} 命名式函数表达式 var 函数名 function 函数关键字(){} 3.函数的调用 var fn function f(){alert("aaa");}//函数名&#xff08;&#xff09;//函数想调用几次…

rpb/rpc文件说明与matlab读取

什么是rpb/rpc文件&#xff1f; rpb文件是用来存储用于遥感数据几何校正的RPC&#xff08;Rational Polynomial Coefficients &#xff09;模型的文件。类似的还有RPC文件&#xff0c;rpb与rpc文件只是格式不同&#xff0c;但包含的信息一致。其用于从图像坐标转换到地理坐标&a…

acwing4986.互质数的个数

题目不难 有个好的细节想着分享一下 一开始写的有点问题&#xff5e;需要特判掉一个... #include<bits/stdc.h> using namespace std; using ll long long; const int N 1e510;const ll mod 998244353;ll qmi(ll a,ll b){ll ans 1;while(b){if(b&1)ans ans*a%…

浅谈6种流行的API架构风格

前言 API在现代软件开发中扮演着重要的角色&#xff0c;它们是不同应用程序之间的桥梁。编写业务API是日常开发工作中最常见的一部分&#xff0c;选择合适的API框架对项目的成功起到了至关重要的作用。本篇文章将浅谈一下当前6种流行的API架构风格的优点、缺点以及适用场景。 …

反向传播(Back Propagation)

目录 回归简单模型的梯度计算 反向传播计算图链式求导链式法则定理&#xff1a; Forward 前馈计算反向传播Back Propagation例子线性模型的计算图计算前馈过程反向传播过程&#xff08;逆向求导&#xff09; 练习 Pytorch中的前馈过程和反向传播过程Tensor代码小结 回归 简单模…

中药房数字化-亿发中药饮片信息化建设方案,中药材饮片智能追溯

中药&#xff08;包括中成药、颗粒剂、中药饮片等&#xff09;是中医临床的重要工具和武器&#xff0c;中药材是其中的核心要素。在这一体系中&#xff0c;“药材好&#xff0c;药才好”是关键&#xff0c;因为只有中药材的品质稳定和高效&#xff0c;才能最大限度地确保中医治…

Android音视频: 引入FFmpeg

本文你可以了解到 本文将介绍如何将上一篇文章编译出来的 FFmpeg so 库&#xff0c;引入到 Android 工程中&#xff0c;并验证 so 是否可以正常使用。 一、开启 Android 原生 C/C 支持 在过去&#xff0c;通常使用 makefile 的方式在项目中引入 C/C 代码支持&#xff0c;随…

Minitab的单因子方差分析的结果

单因子方差分析概述 当有一个类别因子和一个连续响应并且想要确定两个或多个组的总体均值是否存在差异时&#xff0c;可使用 单因子方差分析。如果经检验&#xff0c;发现至少有一组存在差异&#xff0c;请使用单因子方差分析中的比较对话框来标识存在显著差异的组对。 例如&…

前端布局——垂直、水平居中

行内元素 方法一&#xff1a;给行内元素设置行高 <div class"box"><span>行内元素</span> </div> <style type"text/css">.box{width: 100%;height: 200px;background-color: orange;line-height: 200px;text-align: cent…

代码随想录算法训练营第三天| LeetCode203.移除链表元素、707.设计链表、206.反转链表

文章目录 一、203. 移除链表元素感受代码二、707.设计链表感受代码206.反转链表感受总结一、203. 移除链表元素 感受 我对这道题。从理论上来说太熟悉了。咸鱼讲数据结构常用的方法他都会讲。但是我没上机没写过。到后面上机还是写不出来。giao。 代码 第一次写,想说一下,…

LeetCode刷题:141. 环形链表

题目&#xff1a; 是否独立解答出&#xff1a;否&#xff0c;有思路&#xff0c;但是代码报错&#xff0c;参考解题代码后&#xff0c;修改通过 解题思路&#xff1a;利用循环与哈希表存储每一个节点&#xff0c;如果发现添加不进去说明&#xff0c;存在环&#xff0c;正常来说…

x3daudio1_7.dll如何恢复,这6个方法都能修复x3daudio1_7.dll丢失问题

x3daudio1_7.dll文件缺失”。那么&#xff0c;什么是x3daudio17.dll文件&#xff1f;它的作用和影响又是什么呢&#xff1f;本文将详细介绍x3daudio17.dll文件的定义、作用和影响&#xff0c;并提供6个修复方法来解决这个问题。 一、x3daudio1_7.dll是什么&#xff1f; x3dau…