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

news2024/11/17 9:46:15

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

博客首页:未央.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.coloradmin.cn/o/803560.html

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

相关文章

思科视频会议改造为云视频会议

复杂、封闭、昂贵是传统硬件视频会议的明显特点,面对现在多样化的参会需求,传统硬件视频会议固定在会议室的方式需要改变,并需要多层级来参与的时候,我们如何部署视频会议室升级改造方案。 用户需求: 新生活集团(中国…

爬虫分析必备技能:Chrome浏览器使用$x()快速提取列表内容

尝试快速打印一个页面的列表信息,我尝试用console.log$x()快速打印结果。 先找到一个合适的测试对象,比如csdn首页的热点: 按F12进入开发者工具找到这个列表的xpath: 根据我写的xpath找到了5个: 尝试把其中一个的标题…

【ABAP】事务码F-02/FB01/FB02 会计凭证过账BTE增强

需求:事务码F-02/FB01/FB02进行过账时,对行项目数据进行校验 流程: 事务码FIBF——环境(信息系统(处理)) 执行 找到1120事件选中,点击模式函数模块 点①复制函数,②出函…

百题千解计划【CSDN每日一练】计数问题(附解析+多种实现方法:Python、Java、C、C++、JavaScript、C#、go)

人要多久才能成熟!一瞬间?还是一辈子? 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌟[2] 2022年度博客之星人工智能领域TOP4🌟 🏅[3] 阿里云社区特邀专家博主🏅 🏆[4] CSDN-人工智能领域优质创作者🏆 �

用WhatsApp开拓和跟进客户,需要注意这些雷点

我们很多新手小白在利用WhatsApp开拓和维护客户的时候,总是容易犯一些错误,踩到雷点,这不利于客户对企业的印象,不利于增长,下面我们来说一些需要注意的点: 1、专业正确的用语 不管外贸人是跟进哪个国家…

tinkerCAD案例:16. 用字母创建你的名字

tinkerCAD案例:16. Create Your Name From Letters 用字母创建你的名字 letters together so they can be 3D printed. While this could be done with any word, in this example we will use my last name. In the make it your own lesson I provide additional…

全球掀复现「室温常压超导体」热潮,中国队已肝十几小时,韩国团队却内讧了

鱼羊 尚恩 发自 凹非寺 量子位 | 公众号 QbitAI 室温常压超导,这回是真的闹大了。 不止是在国内连上热搜,火速出圈引爆大众讨论。 铅磷灰石价格也在24小时之内迅速被炒了起来。 而物理界的科学家们,更是第一时间拉开了一场全球复现行动。 …

网络安全(黑客)自学误区

前言 网络安全是当今社会中至关重要的议题。随着科技的迅猛发展,网络已经渗透到我们生活的方方面面,给我们带来了巨大的便利和机遇。然而,网络也存在着各种风险和威胁,如黑客攻击、数据泄露等。因此,学习网络安全知识…

IDEA插件YapiUpload配置YApi

前后端分离开发项目,后端提供接口文档,这次使用的是YApi,不想一个个接口添加,所以用插件批量导入。 YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发…

Debezium日常分享系列之:定制Debezium 信号发送和通知

Debezium日常分享系列之:定制Debezium 信号发送和通知 一、自定义信号和通知通道二、结论 Debezium 2.3 在信号和通知功能方面引入了新的改进。除了 Debezium 提供的预定义信号和通知通道之外,您还可以设置新的信号和通知通道。此功能使用户能够自定义系…

数学建模学习(5):数学建模各类题型及解题方案

一、数学建模常见的题型 总体来说,数学建模赛题类型主要分为:评价类、预测类和优化类三种,其中优化类是最常见的赛题类 型,几乎每年的地区赛或国赛美赛等均有出题,必须要掌握并且熟悉。 二、评价类赛题 综合评价是数学…

【线程安全的讨论(一)】CPU多核缓存架构和JMM

CPU多核缓存架构 一、CPU多核缓存架构可见性问题乱序执行(指令重排) 二、JMM——Java内存模型 一、CPU多核缓存架构 计算机的基本组成图 CPU 缓存为了提高程序运行的性能,现代 CPU 在很多方面会对程序进行优化。CPU 的处理速度很快&#xf…

@monaco-editor/react组件CDN加载失败解决办法

monaco-editor/react引入这个cdn资源会load失败 网上很多例子都是这样写的,我这样写monaco会报错 import * as monaco from monaco-editor; import { loader } from monaco-editor/react;loader.config({ monaco });改成这样 import * as monaco from monaco-edi…

2023年第三届控制理论与应用国际会议 | IET独立出版 | EI检索

会议简介 Brief Introduction 2023年第三届控制理论与应用国际会议(ICoCTA 2023) 会议时间:2023年10月20 -22日 召开地点:中国厦门 大会官网:www.icocta.org 控制理论作为一门科学技术,已经广泛地运用于我们社会生活方方面面。随着…

Java【Spring】 核心概念: 什么是 IoC, 什么是 DI?

文章目录 前言一、什么是Spring1, 什么是容器2, 什么是IoC 二、如何理解IoC1, 传统方式的代码编写2, 控制反转的代码编写3, 再谈IoC 三、什么是DI总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象,…

西安电子科技大学

前言 本篇文章投稿与以下活动 【西安城市开发者社区】探索西安高校:展现历史与创新的魅力 资料参考与百度百科 学校简介 西安电子科技大学(Xidian University),简称“西电”,位于陕西省西安市,是中央部…

聚焦东南亚五国 | 7月TikTok达人数据洞察

或许中国直播的盛况,就会在东南亚重演。 据超店有数洞察,2023年7月东南亚TikTok主销五国(印度尼西亚、泰国、越南、马来西亚、菲律宾)带货达人数量环比上涨14.7%,其中越南、泰国市场达人数增长幅度远超均值,分别为25.46%、17.16%。…

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

链表是一种通过指针串联在一起的线性结构, 单链表 单链表每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。 双链…

搭建JMeter+Jenkins+Ant持续化

在D盘下新建文件夹Test,在其中填充文件夹 在 ant中解压 “apache-ant-1.9.14-bin.zip” 在TestAudo中新建文件夹 进入pc文件夹继续新建文件夹并把准备好的build.xml拖入 在resultlog中新建两个空文件夹 名称分为 html jtl 把准备好的baidu.jmx放入script 配置环境变量 在环…

2023跨境电商有哪些热门的夏季选品类目?纯干货!快戳进来

1、厨房用品 夏季食材新鲜多样,所以厨房用品非常受欢迎。 冷水壶、冰桶、冰箱收纳盒等可帮助保持食材新鲜;烤肉架、烤盘、烤架、烤盘套装等是户外烧烤时的好帮手刨冰机、果汁机、冰淇淋机等可以制作各种冰凉饮品和甜品。 2、客厅用品 夏季在家放松休息&a…