【牛客面试必刷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):常数级空间;


代码编写:


总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Ansible】Ansible自动化运维工具的应用与常用命令

ansible自动化运维工具 一、ansible 的概述1. ansible 的概念2. ansible 的特性 二、ansible 的部署与命令1. ansible 的部署1.1 服务器ip地址设置1.2 ansible 服务器部署 2. ansible 命令行模块2.1 command 模块2.2 shell 模块2.3 cron 模块2.4 user 模块2.5 group 模块2.6 co…

财报解读:新鲜感褪去后,微软直面AI的骨感现实?

微软交出了一份远观尚可,但近看承压的“答卷”。 北京时间2023年7月26日,微软披露了2023财年第四财季及全年财报。受生产力和业务流程部门和智能云部门等业务带动,微软第四财季营收561.89亿美元,同比增长8%;净利润200…

【iOS】—— 持久化

文章目录 数据持久化的目的iOS中数据持久化方案数据持久化方式分类内存缓存磁盘缓存 沙盒机制获取应用程序的沙盒路径沙盒目录的获取方式 持久化数据存储方式XML属性列表Preferences偏好设置(UserDefaults)数据库存储什么是序列化和反序列化,…

TypeError: Failed to fetch dynamically imported module

浏览器报了如下错误: vue文件如下: 错误出现的原因是因为导入的是路径,vue会在该路径下的文件夹搜索所有文件,但是没有找到对应的组件,但是浏览器并不会直接禁止访问,而是在控制台报错,解决办法…

【雕爷学编程】Arduino动手做(174)---Sensor Shield V5.0传感器扩展板

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

k8s证书过期

k8s证书过期 [rootk8s-master102 ~]# kubectl get pod -A Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2023-07-25T15:14:0008:00 is after 2023-07-24T16:25:58Z解决方案 备份 kubernetes配置 cp -r /etc/kubernet…

【Python 实战】---- 批量识别图片中的文字,存入excel中【使用百度的通用文字识别】

分析 1. 获取信息图片示例 2. 运行实例 3. 运行结果 4. 各个文件的位置 实现 1. 需求分析 识别图片中的文字【采用百度的通用文字识别】;文字筛选,按照分类获取对应的文本;采用 openpyxl 实现将数据存入 excel 中。2. 获取 access_token 获取本地缓存的

谈谈你对Synchronized关键字的理解及使用

synchronized关键字最主要的三种使用方式的总结 修饰实例方法,作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁 。也就是给当前类加锁&…

DFS之剪枝与优化--小猫爬山

思路&#xff1a;对小猫的数量和车箱数进行bfs&#xff0c;一旦小猫的数量达到n&#xff0c;就统计ans的数量&#xff0c;如果当前车的剩余重量无法再承受任意一个猫的重量&#xff0c;那么我们将车辆数1来保证小猫能够下山。 #include<bits/stdc.h> using namespace std…

芯片制造详解.净洁室的秘密.学习笔记(三)

这是芯片制造系列的第三期跟学up主三圈&#xff0c;这里对其视频内容做了一下整理和归纳&#xff0c;喜欢的可以看原视频。 芯片制造详解03&#xff1a; 洁净室的秘密&#xff5c;为何芯片厂缺人&#xff1f; 芯片制造详解.净洁室的秘密.学习笔记 三 简介一、干净的级别二、芯片…

Mybatis 新增/批量新增, 拿到返回的自增主键ID

单个新增 &#xff1a; /** * 插入菜单 * param menuInfo * return */ int insertMenuInfo(MenuInfo menuInfo); xml&#xff1a; <insert id"insertMenuInfo" parameterType"com.XXXX..MenuInfo" keyProperty"id&quo…

devops(后端)

1.前言 该devpos架构为gitlabjenkinsharbork8s&#xff0c;项目是java项目&#xff0c;流程为从gitlab拉取项目代码到jenkins&#xff0c;jenkins通过maven将项目代码打成jar包&#xff0c;通过dockerfile构建jdk环境的镜像并把jar包放到镜像中启动&#xff0c;构建好的镜像通…

系统集成项目管理工程师挣值分析笔记大全

系统集成项目管理工程师挣值分析笔记大全 挣值分析是一种项目管理技术&#xff0c;用于量化和监控项目绩效。它通过比较计划值&#xff08;PV&#xff09;、实际成本&#xff08;AC&#xff09;和挣值&#xff08;EV&#xff09;三个参数来评估项目的进展情况和成本绩效。 挣值…

flex布局进阶

推荐看一下阮一峰老师的flex布局博客【Flex 布局教程&#xff1a;语法篇】(https://www.ruanyifeng.com/blog/2015/07/flex-grammar.html#)&#xff0c;讲的非常清晰。 一、多行布局大小相同的子盒子技巧 使用弹性布局实现多行均匀布局时&#xff0c;如若子盒子数量不能被每行…

flutter开发实战-父子Widget组件调用方法

flutter开发实战-父子Widget组件调用方法 在最近开发中遇到了需要父组件调用子组件方法&#xff0c;子组件调用父组件的方法。这里记录一下方案。 一、使用GlobalKey 父组件使用globalKey.currentState调用子组件具体方法&#xff0c;子组件通过方法回调callback方法调用父组…

项目报错clone2.weekday is not a fuction

ant-design-vue中的dayjs版本和我项目中的dayjs版本不一样 项目中的dayjs版本号 ant-design-vue中的dayjs版本号"dayjs": “^1.11.9” 解决方法&#xff1a; 将项目中的版本号更新"dayjs": “^1.11.9” yarn add dayjs^1.11.9

嵌入式软件—RK3568开发环境搭建

一、RK3568 1.1 开发板特点 BSP比较大&#xff0c;对于电脑内存和存储空间要求高 1.2 BSP BSP&#xff08;Board Support Package&#xff0c;板级支持包&#xff09;&#xff0c;类似于PC系统中BIOS和驱动程序的集合&#xff0c;BSP包含的范围更广&#xff0c;除了外设驱动…

vue+ivew model框 select校验遇到的问题

iview model 点击关闭&#xff0c;校验没有通过也会关闭 解决办法&#xff1a; 第一步&#xff1a;自定义页脚内容 <div slot"footer"><Button type"primary" click"confirmCarryOver()">确认</Button><Button click&qu…

第五章 数组

定义 数组是一组相同类型元素的集合&#xff0c;但我们需要创建多个相同类型的变量时&#xff0c;只需要创建一个类型的数组&#xff0c;就相当于同时创建很多相同类型的变量。 一维数组 数组如何创建 从定义来入手看一下数组的创建&#xff1a; type_t arr_name[const_n];…

内置 NMOS 单路 PWM 控制的高调光比 LED 降压恒流控制器

概述 OC5401M 是一款内置调光 NMOS 的单路 PWM 控制的高调光比降压恒流驱动控制器&#xff0c;PWM 调光比最高可达 10000&#xff1a;1。 OC5401M 支持 16-60V 输入电压范围。 OC5401M 采用电流滞环控制方式&#xff0c;无需环路补偿。 OC5401M 可通过外接电阻设置 LED输出电流…