【牛客面试必刷TOP101】Day1.反转链表和合并两个排序的链表

作者简介:大家好,我是未央;

博客首页:未央.303

系列专栏:牛客面试必刷TOP101

每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!!!

文章目录

前言

一.反转链表

题目描述

解题分析 

 二.合并两个排序的链表

题目描述

解题分析

总结


前言

今天是我们第一天的牛客面试必刷TOP101,比较简单,一定要好好掌握清楚;每天见!!!


一.反转链表

题目描述

描述

给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。

数据范围: 0≤10000≤n≤1000

要求:空间复杂度O(1) ,时间复杂度 O(n) 。


举例说明:

如当输入链表{1,2,3}时,

经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。

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


示例1:


示例2:


解题分析 

解题思路:

首先本题我们决定采用栈的方法来反转链表最为简单;

因为栈是先进后出的。实现原理就是把链表节点一个个入栈,当全部入栈完之后再一个个出栈,出栈的时候在把出栈的结点串成一个新的链表;

代码编写思路步骤:

1.创建一个空栈和一个辅助指针current ,并将current指向链表的头节点。


⒉将节点逐个压入栈中,直到链表的末尾。每次压入节点时,将current 指针向后移动到下一个节点。


3.弹出栈中的节点,并将其依次连接起来,形成新的链表。

在这个过程中,需要保持一个指针prev ,用来指向新链表的头节点。


4.重复步骤3直到栈为空,此时所有的节点都已经被反转。


5.将新链表的头节点返回作为结果。


复杂度分析:

时间复杂度为O(n),其中n表示链表的长度。

空间复杂度是O(1),因为反转链表时只需要使用几个指针变量,不需要额外的数据结构来存储节点。


图示说明:

图片说明


代码编写:

详细代码解析:

步骤4中23~28行代码:

while (!stack.isEmpty()) {ListNode node = stack.pop();prev.next = node;prev = node;}

解析:

在上述代码中,prev.next = node 的作用是将 prev 节点的 next 指针指向 node 节点,即将当前节点与前一个节点进行连接。

首先,我们将栈中弹出的第一个节点作为新链表的头节点,将其赋给 newHead 变量。

接下来,在循环中,我们使用 prev 变量来表示当前的节点,而 node 变量则表示从栈中弹出的下一个节点。于是,prev.next = node 表示将 prev 节点的 next 指针指向 node 节点,将它们连接在一起。

然后,通过 prev = node 操作,将 prev 更新为当前的节点 node,以便在下一次循环中连接下一个节点。

通过这样的操作,我们可以依次将栈中的节点连接起来,最终形成反转后的链表。在循环结束后,prev 指向的是新链表的尾节点。

 二.合并两个排序的链表

题目描述

描述:

输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。

数据范围: 0≤10000≤n≤1000,−1000≤节点值≤1000−1000≤节点值≤1000
要求:空间复杂度 O(1),时间复杂度 O(n
)。


举例说明:

如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6},转换过程如下图所示:

或输入{-1,2,4},{1,3,4}时,合并后的链表为{-1,1,2,3,4,4},所以对应的输出为{-1,1,2,3,4,4},转换过程如下图所示: 


示例1:


示例2:

 


示例3:

解题分析

解题思路:

本题我们决定采用递归的方法解决比较简单方便;

分类讨论:

1.如果有一个链表为空,返回另一个链表(特殊情况)
2.如果pHead1 节点值比小pHead2,下一个节点应该是 pHead1,应该return pHead1,在return之前,指定pHead1的下一个节点应该是pHead1.next和pHead2俩链表的合并后的头结点;
3.如果pHead1 节点值比pHead2大,下一个节点应该是pHead2,应该return pHead2,在return之前,指定pHead2的下一个节点应该是pHead1和pHead2.next俩链表的合并后的头结点;


代码编写思路步骤:

1.首先,编写一个递归函数,用于合并两个排序链表。


2.在递归函数中,判断某个链表是否为空。如果其中一个链表为空,说明已经到达链表的末尾,直接返回另一个链表。(特殊情况)


3.如果两个链表都不为空,比较两个链表的头节点的值。将较小的头节点作为合并后链表的头节点。


4.然后,递归地调用合并函数,传入较小头节点的下一个节点和另一个链表。将递归返回的结果连接到较小头节点的后面,形成合并后的链表。


5.最后,返回合并后的链表作为结果。


复杂度分析:

时间复杂度O(N+M):M N分别表示pHead1, pHead2的长度;

空间复杂度O(1):常数级空间;


代码编写:


总结

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

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

相关文章

详细分析Python中运算符“==“和“is“的区别

目录 Python中运算符"" Python中运算符"is" ""和"is"的区别 总结 Python中运算符"" 在Python中,双等号运算符"" 用于比较两个值是否相等。它返回一个布尔值,即True或False,…

C# 使用opencv从图片识别人脸示例

1.用chatgpt帮我写了一个示例 using System; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure;class Program {static void Main(string[] args){// 加载人脸分类器CascadeClassifier faceCascade new CascadeClassifier("haarcascade_frontalface_defau…

JenKins工作流程

程序员提交代码到Git/SVN仓库,触发钩子程序向 JenKins 进行通知,Jenkins 调用Git/SVN插件获取源码,调用Maven打包为war包,调用Deploy to web container插件部署到Tomcat服务器。

Redis哨兵模式

Redis哨兵模式 一、服务器准备二、安装redis1.Master服务器2.SlaveFirst服务器3.SlaveSecond服务器 三、依次开启Redis服务器四、开启哨兵1.修改Master哨兵配置文件2.修改SlaveFirst哨兵配置文件3.修改SlaveSecond哨兵配置文件4.开启哨兵5.验证是否开启成功6.主从配置如下五、挂…

【替换】批量替换命令文件名称或者文件内容

你是否困扰过,每次文件F2进行修改,十几个没关系,百来个写代码麻烦,那就使用shell命令吧 执行语句 先养成习惯查询验证,因为是批量替换,为了防止全局替换嘎嘎叫 替换文件名 # 【习惯】先使用顾虑查询&…

最新基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法

文献计量学是指用数学和统计学的方法,定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体,注重量化的综合性知识体系。特别是,信息可视化技术手段和方法的运用,可直观的展示主题的研究发展历程、研究现状、研究…

收藏这11个插画网站,插画师必备!

无论是在哪种设计工作中,插画素材都是比较常用的素材。今天本文整理了11个好用的插画工具,能帮助设计师轻松绘制出插画,一起来看看吧! 1、即时设计 即时设计是一款国产的,省心省力的插画工具。它为设计师提供了简单易…

python实现某品牌数据采集

某品牌数据采集 采集需求 地址:http://www.winshangdata.com/brandList 需求:用scrapy框架采集本站数据,至少抓取5个分类,数据量要求5000以上 采集字段:标题、创建时间、开店方式、合作期限、面积要求 网页分析 …

大模型部署框架 FastLLM 实现细节解析

0x0. 前言 接着 大模型部署框架 FastLLM 简要解析 这篇文章首先梳理了一下FastLLM的调用链和关键的数据结构,然后解析了 FastLLM 的一些实现细节和CPU/GPU后端实现采用的优化技巧。 0x1. 调用链和数据结构解析 以chatglm-6b的支持为例,函数入口在 htt…

NLP实验案例100个(1-5)

实验一 array数组(01) 一、实验目的及要求 1.安装numpy环境,掌握基本的数组知识以及操作。 二、实验设备(环境)及要求 开发环境:jupyter notebook 开发语言以及相关的库:python开发语言、nu…

微信小程序开发,小程序类目符合,线上版本无权限申请wx.getLocation接口

我开发 的小程序类目符合wx.getLocation接口的申请标准 但是却还是显示无权限申请 后来研究好久才发现,小程序需要在发布线上版本时提交用户隐私保护指引 如未设置也可以在 设置-服务内容声明-用户隐私保护指引-声明处理用户信息项并补充填写后提交用户隐私协议审核…

使用docker-compose搭建lnmpr环境

源码gitee compose 使用的三个步骤: • 使用 Dockerfile 定义应用程序的环境。 • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。 • 最后,执行 docker-compose up -d 命令来启动并运行整个应用程序…

D2L学习记录-10-词嵌入word2vec

NLP-1-词嵌入(word2vec) 参考: 《动手学深度学习 Pytorch 第1版》第10章 自然语言处理 第1、2、3 和 4节 (词嵌入) 词嵌入 (word2vec): 词向量:自然语言中,词是表义的基本单元。词向量是用来表示词的向量。词嵌入 (word embedding)&#x…

常见的正则表达式

目录 问题现象: 问题分析: 解决方法: 拓展: 1、手机号或座机: 2、邮箱: 3、中文: 4、数字: 5、英文: 6、组合: 问题现象: 今天在项目中&…

数据库转换分析软件:EasyMorph 5.X Crack

EasyMorph 为您和您的团队提供数据超能力。无需编码技能。不要问 IT 人员。 自己做。 内置动作 即使您不是 IT 专家,也可以从任何地方检索数据并自动执行复杂的数据转换 无需 SQL 或编程知识 — 设计简单且 100% 可视化 减少对企业IT部门的依赖,减少繁琐…

Git的远程操作与多人协作

"爱在地图上剥落,我离孤单几公里~" 我们目前所说、所学的内容(工作区、暂存区、版本库)都只是存在于本地上,也就是说你的一台机器上只有这么一个你维护的版本库。可是Git是一个分布式版本控制系统,这又是什…

YOLO 划分数据集(训练集、验证集、测试集)

目录 前言训练集、验证集(8:2)训练集、验证集、测试集(7:2:1) 前言 本博客是在我的另一篇博客 VOC 格式与 YOLO 格式的相互转换 的基础上进行的,有需要可以参考 以下代码亲测可以直接复制运行(以下所有的路…

【个人笔记】Linux命令之watch命令

1.命令简介 watch 以周期性方式执行给定的命令,并全屏显示执行结果,可以帮助监测一个命令的运行结果。 2.命令格式及参数选项说明 命令格式: watch [OPTIONS] COMMAND选项说明: -d, --differences [PERMANENT]高亮显示最近两…

ES6基础知识二:ES6中数组新增了哪些扩展?

一、扩展运算符的应用 ES6通过扩展元素符…&#xff0c;好比 rest 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的参数序列 console.log(...[1, 2, 3]) // 1 2 3console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5[...document.querySelectorAll(div)] // [<div>, &l…

【机器学习】基础知识点的汇总与总结!更新中

文章目录 一、监督学习1.1、单模型1.1.1、线性回归1.1.2、逻辑回归&#xff08;Logistic Regression&#xff09;1.1.3、K近邻算法&#xff08;KNN&#xff09;1.1.4、决策树1.1.5、支持向量机&#xff08;SVM&#xff09;1.1.6、朴素贝叶斯 1.2、集成学习1.2.1、Boosting1&…