算法的学习笔记—反转链表(牛客JZ24)

news2024/11/15 9:27:19

img

😀前言
在算法面试中,链表问题是一个常见的考点,而反转链表更是其中的经典题目之一。本篇文章将通过具体的代码实现和思路解析,带你深入理解反转链表的解法。

🏠个人主页:尘觉主页

文章目录

  • 😀反转链表
    • 😊问题描述
      • 示例1
      • 示例2
    • 😉解题思路
      • 🥰递归解法
        • 递归解法的分析
      • 🥰迭代解法
        • 迭代解法的分析
    • 😄总结

😀反转链表

NowCoder

😊问题描述

给定一个单链表的头结点 pHead,其长度为 n,要求将链表反转并返回反转后的新链表的头节点。我们需要在空间复杂度为 O(1) 和时间复杂度为 O(n) 的条件下完成这一操作。

例如,当输入链表为 {1,2,3} 时,经过反转后得到的链表应为 {3,2,1}

以上转换过程如下图所示:

img

示例1

  • 输入{1,2,3}
  • 输出{3,2,1}

示例2

  • 输入{}
  • 输出{}
  • 说明:空链表则输出为空。

😉解题思路

反转链表主要有两种解法:递归和迭代。下面我们将分别介绍这两种方法。

🥰递归解法

递归是一种非常自然的思维方式。在反转链表的问题中,递归的核心思想是将链表逐步缩短,并将缩短后的链表进行反转。具体来说,假设我们已经成功反转了链表的后半部分,那么我们只需要将当前节点接到反转后的链表末尾即可。

递归解法的代码实现如下:

public ListNode ReverseList(ListNode head) {
    // 基本情况:如果链表为空或只有一个节点,则直接返回当前节点
    if (head == null || head.next == null)
        return head;
    
    // 递归反转后续节点
    ListNode next = head.next;
    head.next = null;
    ListNode newHead = ReverseList(next);
    
    // 将当前节点接到反转后的链表末尾
    next.next = head;
    
    return newHead;
}

递归解法的分析
  • 时间复杂度O(n)。递归遍历了链表中的每一个节点,时间复杂度为 O(n)
  • 空间复杂度O(n)。由于递归函数调用占用了系统栈空间,空间复杂度为 O(n),不满足题目对 O(1) 空间复杂度的要求。

虽然递归解法简单直观,但由于其空间复杂度为 O(n),不满足题目的要求。因此,在实际应用中,我们通常选择迭代解法。

🥰迭代解法

迭代解法通过头插法实现链表的反转。在遍历链表的过程中,将当前节点插入到新链表的头部,从而完成链表的反转。

迭代解法的代码实现如下:

public ListNode ReverseList(ListNode head) {
    // 创建一个新的空链表,用于存储反转后的节点
    ListNode newList = new ListNode(-1);
    
    while (head != null) {
        // 保存当前节点的下一个节点
        ListNode next = head.next;
        
        // 将当前节点插入到新链表的头部
        head.next = newList.next;
        newList.next = head;
        
        // 移动到下一个节点
        head = next;
    }
    
    // 返回新链表的头节点
    return newList.next;
}
迭代解法的分析
  • 时间复杂度O(n)。迭代遍历了链表中的每一个节点,时间复杂度为 O(n)
  • 空间复杂度O(1)。由于我们只使用了常量级别的额外空间,空间复杂度为 O(1)

迭代解法不仅满足题目对时间复杂度和空间复杂度的要求,还避免了递归深度过大的问题,是一种更为高效和实用的解决方案。

😄总结

反转链表问题是链表类题目中的经典问题,通过递归和迭代两种不同的方法,我们可以灵活应对各种场景。递归解法简单直观,但在空间复杂度上有所欠缺;而迭代解法则在时间和空间效率上更胜一筹,适合在实际工程中使用。

通过本文的学习,相信你已经掌握了反转链表的核心思路和两种主要解法。无论是在面试中还是实际开发中,希望这些技巧都能助你一臂之力。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

img

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

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

相关文章

【前端】NodeJS:项目上线

文章目录 1 项目上线1.1 搭建本地仓库1.1.1 初始化仓库1.1.2 全局忽略1.1.3 提交 1.2 连接远程仓库1.2.1 新建仓库1.2.2 复制地址1.2.3 添加远程存储库 1.3 发布项目 2 配置HTTPS证书2.1 HTTPS2.2 操作流程: 1 项目上线 1.1 搭建本地仓库 1.1.1 初始化仓库 1.1.2 全局忽略 1.…

福泰轴承股份有限公司进销存系统pf

TOC springboot413福泰轴承股份有限公司进销存系统pf 绪论 1.1 研究背景 现在大家正处于互联网加的时代,这个时代它就是一个信息内容无比丰富,信息处理与管理变得越加高效的网络化的时代,这个时代让大家的生活不仅变得更加地便利化&#…

Idea里配置Maven版本

一、安装Maven 1. 官网下载maven地址: Maven – Download Apache Maven Binary是可执行版本,已经编译好可以直接使用。 Source是源代码版本,需要自己编译成可执行软件才可使用。tar.gz和zip两种压缩格式,其实这两个压缩文件里面包含的内容是…

AWS域名注册服务:为您的在线业务打下坚实基础

在如今的数字时代,域名是每个在线业务的基础。一个好的域名不仅可以提升品牌形象,还能为用户提供便捷的访问体验。亚马逊网络服务(AWS)提供了强大的域名注册服务,帮助企业轻松获取和管理域名。我们九河云将深入探讨AWS…

Spring:IOC的详解☞Bean的实例化、Bean的生命周期

1、Bean基础配置 bean的基础配置&#xff1a; <bean id"" class""/> Bean的别名&#xff1a;name属性 Bean的作用范围&#xff1a;scope配置 使用bean的scope属性可以控制bean的创建是否为单例&#xff1a; singleton 默认为单例prototype 为非单…

HiveSQL:提取json串内容——get_json_oject和json_tuple

提取json串中内容&#xff0c;json格式示例如下 方法&#xff08;运行环境Hive&#xff09; get_json_objectjson_tuple get_json_object select json_data,get_json_object(json_data,$.price) as price -- 取第一层,get_json_object(json_data,$.inquiry_params) as in…

Hive3:常用的内置函数

1、查看函数列表 -- 查看所有可用函数 show functions; -- 查看count函数使用方式 describe function extended count;2、数学函数 -- round 取整&#xff0c;设置小数精度 select round(3.1415926); -- 取整(四舍五入) select round(3.1415926, 4); -- 设置小数精度4位(四…

wordpress资源下载博客站微信小程序源码v1.0

小程序说明&#xff1a; 本套源码基于hbuilder制作&#xff0c;支持QQ小程序&#xff0c;微信小程序等各大平台小程序版本&#xff0c;小程序需要配合后端wordpres系统管理发布&#xff0c;带有广告功能&#xff0c;非常适合运营。 功能说明&#xff1a; 1.全新pods rest a…

IDEA中如何配置Gradel加速与相关依赖找不到如何解决?

如何配置依赖加速 参考文章: https://www.cnblogs.com/yongdaimi/p/17892882.html 配置步骤 新版本的IDEA中进行插件开发需要单独下载开发插件 具体配置一下镜像加速 安装好上面的插件,进行下面这些配置。 在上面本地安装路劲在进行镜像加速的配置 新建一个init.gra…

数学建模——评价决策类算法(熵权法、模糊综合评价)

一、熵权法&#xff08;求解权重&#xff09; 概念原理 代码 import numpy as np # 导入numpy库&#xff0c;并简称为np# 定义一个自定义的对数函数mylog&#xff0c;用于处理输入数组中的零元素 def mylog(p):n len(p) # 获取输入向量p的长度lnp np.zeros(n) # 创建一个…

C语言典型例题42

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题3.2 有3个整数a&#xff0c;b&#xff0c;c&#xff0c;由键盘输入&#xff0c;输出其中最大的数&#xff0c;请编程序。 代码&#xff1a; //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //习…

URP 2022.3 custom render pass

这里需要注意&#xff0c;有两个部分要做&#xff0c;一步是写脚本和shader&#xff0c;一步是在editor里进行绑定 这里有个概念上需要注意的&#xff0c;他这个pass啊&#xff0c;实际依赖问题都需要你自己在execute处理的&#xff0c;比如你要画N次东西&#xff0c;就要在exe…

管易云·奇门与MySQL对接集成历史发货单查询连通执行操作-v1(管易历史发货单)

管易云奇门与MySQL对接集成历史发货单查询连通执行操作-v1(管易历史发货单) 接通系统&#xff1a;管易云奇门 管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌&#xff0c;先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务&#xff0c…

算法力扣刷题记录 八十三【96.不同的二叉搜索树】

前言 动态规划第9篇。记录 八十三【96.不同的二叉搜索树】。 一、题目阅读 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输…

开箱即用的企业级CICD工具-云效流水线 Flow

开箱即用的企业级CICD工具-云效流水线 Flow 开箱即用的企业级CICD工具-云效流水线 Flow资源领取实操来啦编排流水线新建主机组运行流水线运行结果 关于 云效流水线 Flow 的一些看法操作感受新人建议满意与建议流水线Flow 优势 开箱即用的企业级CICD工具-云效流水线 Flow 看到这…

短视频SDK解决方案,降低行业开发门槛

美摄科技匠心打造了一款集前沿技术与极致体验于一体的短视频SDK解决方案&#xff0c;它不仅重新定义了短视频创作的边界&#xff0c;更以行业标杆级的短视频特效&#xff0c;让每一帧画面都闪耀不凡光芒。 【技术赋能&#xff0c;创意无限】 美摄科技的短视频SDK&#xff0c;…

OceanBase V4.3 列存引擎之场景问题汇总

在OceanBase 4.3版本发布后&#xff08;OceanBase社区版 V4.3 免费下载&#xff09;&#xff0c;其新增的列存引擎&#xff0c;及行列混存一体化的能力&#xff0c;可以支持秒级实时分析&#xff0c;引发了用户、开发者及业界人士的广泛讨论。本文选取了这些讨论中较为典型的一…

Linux系统top命令参数说明

目录 一、top命令概览 二、参数说明 一、top命令概览 二、参数说明 第一行&#xff1a;系统的整体情况概览 top:表示这是个top命令 10:53:55:表示当前系统时间 up 17 days, 19:10:表示系统运行时间 1user:表示当前登录用户人数 load average:表示1分钟/5分钟/15分钟 系统负载…

LangChain 实战案例:老喻干货店的 TextToSql 应用解析

前言 当我们在做项目开发时&#xff0c;数据库设计是项目早期的核心工作之一。我们要考虑业务需要用到的表、关联、索引&#xff0c;并预想出未来核心需求或易产生瓶颈的SQL。当这些事情做完&#xff0c;就可以喝杯咖啡&#xff0c;到前台摸鱼会儿了… 如果你是刚入门数据库学…

出海笔记精华问答 | 第四期

更新出海问答第四期&#xff0c;希望可以继续帮助大家解决问题哈。 Q1:当stripe把资金全退给客户但是货又发了&#xff0c;这是什么情况&#xff1f; A1: 这种情况一般是stripe不跟你合作了或者发生了争议。 Q2:如何知道stripe回复你的邮件是人工回复还是机器人回复&#xff…