【力扣刷题】回文链表、环形链表、合并两个有序链表

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
Redis
石可破也,而不可夺坚;丹可磨也,而不可夺赤。
刷题篇
- 一、回文链表
- 1.1 题目描述
- 1.2 思路分析
- 1.3 代码演示
- 二、环形链表
- 2.1 题目描述
- 2.2 思路分析
- 2.3 代码演示
- 三、合并两个有序链表
- 3.1 题目描述
- 3.2 思路分析
- 3.3 代码演示
一、回文链表
1.1 题目描述
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。


1.2 思路分析
首先是要对该链表进行非空校验,若是空链表,直接返回fasle,否则,执行其它逻辑,按照回文链表的规律,可以有这样一个思路:若它是回文链表,可先找到他的前半个回文链表的最后一个节点,通过这个节点,就能找到开始回文的下半个链表的最后一个节点,从该节点处,将后半个回文链表进行整体反转,然后再定义指针进行遍历,从前半个回文链表的头开始作为p1指针,后半个回文链表的头作为p2指针,遍历整个回文链表,判断它们的值是否相同,若不相同,则不是回文链表,否则就是回文链表。
1.3 代码演示
public boolean isPalindrome(ListNode head) {//非空判断if (head == null) {return false;}//找到回文链表前一段的最后一个节点ListNode firstHalfEnd = endOfFirstList(head);//找到回文链表反转后的第一个节点ListNode firstHaftStart = reverse(firstHalfEnd.next);//设置标记boolean result = true;//设置遍历指针ListNode p1 = head;ListNode p2 = firstHalfStart;while(result && p2 != null) {if(p1.val != p2.val) {result = false;}p1 = p1.next;p2 = p2.next;}//恢复链表firstHaftEnd.next = reverse(firstHalfEnd.next);return result;}public static ListNode reverse(ListNode head) {ListNode prev = null;ListNode curr = head;while (curr != null) {ListNode temp = curr.next;curr.next = prev;prev = curr;curr = temp;}return prev;}public static ListNode endOfFirstList(ListNode head) {//设置快慢指针进行查找ListNode fast = head;ListNode slow = head;while (fast.next != null && fast.next.next != null) {slow = slow.next;fast = fast.next.next;}return slow;}
二、环形链表
2.1 题目描述
给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链>表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回 true 。 否则,返回 false 。



2.2 思路分析
先进行非空校验,若head为null,字直接返回false,否则进行其它代码,定义快慢指针slow和fast,fast指针比slow指针快走两步,while循环进行遍历,条件是slow不等于fast,遍历整个链表,循环内是快慢指针的执行,当链表存在环时,fast指针总会多转几圈从而追上慢指针slow,此时两个指针均指向同一个节点,表示该链表存在环,跳出循环,返回true,若是在循环中fast指向了空或者fast.next指向了空,表示该链表是正常的单向链表,直接返回false即可。
2.3 代码演示
public boolean hasCycle(ListNode head) {if (head == null) {return false;}ListNode fast = head.next;ListNode slow = head;while (slow != fast) {if (fast == null || fast.next == null) {return false;}//fast指针每次比slow指针快走两步//若该链表存在环,则这两个指针会进入环中//fast总有机会比slow多转n圈从而追上slow//此时跳出循环,表示该链表是环形来链表fast = fast.next.next;slow = slow.next;}return true;}
三、合并两个有序链表
3.1 题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。


3.2 思路分析
按照题目要求,可以先对空值进行校验,若两个链表均为空,则直接返回空,若只有一个链表为空,则直接返回另一个链表,否则进行其它代码,定义一个哨兵节点并定义一个指向它的的指针,当两个链表均不为空时,以此为条件开始遍历,在循环中判断两个链表当前的节点值的大小情况,若链表1的值小,则将哨兵位的下一个节点指向链表1,否则,则将哨兵位的下一个节点指向链表2,然后prev指向prev.next继续遍历链表,循环结束时,若链表长度不等,则较长的链表直接将剩余的节点加到prev的next下,返回合并后的链表的头节点,即哨兵位的下一个节点。
3.3 代码演示
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {if(list1 == null && list2 == null) {return null;}if(list1 == null && list2 != null) {return list2;}if(list1 != null && list2 == null) {return list1;}//定义一个哨兵位节点ListNode preHead = new ListNode(-1);//定义一个指针指向哨兵位,作为遍历指针ListNode prev = preHead;//当链表都不为空时,开始遍历while(list1 != null && list2 != null) {if(list1.val < list2.val) { //遍历链表,比较链表当前节点的值的大小prev.next = list1; //若链表1的值小,则将哨兵位的下一个节点指向链表1list1 = list1.next; //链表1继续遍历} else {prev.next = list2; //若链表2的值小,则将哨兵位的下一个节点指向链表2list2 = list2.next; //链表2继续遍历}prev = prev.next; //prev继续遍历链表}prev.next = list1 == null ? list2 : list1; //若链表长度不等,则较长的链表直接将剩余的节点加到prev的next下即可return preHead.next; //返回合并后的链表的头节点,即哨兵位的下一个节点}
相关文章:
【力扣刷题】回文链表、环形链表、合并两个有序链表
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 刷题篇 一、回文链表1.1 题目描述1.2 思路分…...
linux错误处理函数
linux c之perror、exit_perror与exit-CSDN博客 linux网络编程(三) TCP通信时序与多进程/线程并发服务器的编写-阿里云开发者社区 函数简介篇——错误处理函数:errno值、perror()、streeor()、streeor_r()_惺忪牛犊子的博客-CSDN博客...
vue2技能树(5)-条件渲染和列表渲染
目录 Vue 2 条件渲染详解v-if 和 v-else 指令项目示例 v-show 指令项目示例 v-if 和 v-show 的区别v-if 和 v-else-if 指令项目示例 Vue 2 列表渲染详解v-for 指令项目示例 计算属性和方法项目示例 v-bind:key项目示例 使用对象的v-for项目示例 v-for 的索引项目示例 …...
MySQL基本操作之创建数据库
1、大小写敏感 一般大家都默认使用:小写 在MySQL中,大小写敏感性有两个方面的规定:lower_case_file_system和lower_case_table_names。 lower_case_file_system:指定操作系统文件系统是否对大小写敏感。 当设置为ON时,表示文件系统对大小写不敏感;当设置为OFF时,表示…...
8.对象贴地
愿你出走半生,归来仍是少年! 在场景中,有时候需要对地物(房屋、楼宇)进行贴地处理,或者说相对地面高度(井盖、井室)进行设置。 通过自定义的Terrain切片以及影像瓦片构建的三维场景应该如何获取…...
AWS Lambda – 函数版本,别名,API网关,CodeDeploy协同
Hello大家好,我们今天继续讨论AWS Lambda的内容。 Lambda函数的版本 Lambda函数的版本和别名是辅助资源,我们可以通过创建这些资源管理函数的部署和调用。 首先,让我们来看一下Lambda 函数版本的概念。您可以使用版本来管理函数的部署。例…...
flutter doctor检测环境,出现CocoaPods installed but not working
1. 安装flutter, 地址: 安装和环境配置 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 2. 安装成功后,通过flutter doctor检测环境。以mac为例,出现了CocoaPods installed but not working 错误提示时,以下为解决方案: 2.1 rvm i…...
Python 条件和 if 语句
Python支持来自数学的通常逻辑条件: 等于:a b不等于:a ! b小于:a < b小于或等于:a < b大于:a > b大于或等于:a > b 这些条件可以以多种方式使用,最常见的是在"i…...
行业领先的三个企业正在利用聊天机器人变得更强
聊天机器人已成为客户服务领域的革命者,深刻地改变了企业与客户互动的方式。这些虚拟助手简化了交互,提供了24/7全天候高效和个性化的支持。凭借先进的技术和自然语言处理能力,聊天机器人擅长快速处理查询。 效率是聊天机器人的关键优势。它…...
「Git|场景案例」从项目中删除之前commit过的文件并且让git不追踪删除操作
本文主要介绍如何在git中删除文件但是让git不追踪这些删除操作 文章目录 场景说明解决方案删除一个文件删除一个文件夹以及子文件夹 场景说明 自己在使用react开发一个包含大量媒体文件的网站时,项目初期临时将这些媒体文件都放在项目中,直接使用访问本…...
一款.NET Core开源的基于Vue+ElementUI开发的博客系统 - StarBlog
前言 今天给大家推荐一款.NET Core开源的基于VueElementUI开发的博客系统 - StarBlog。该项目配套详细的文章教程,可以作为 .Net Core 入门项目学习。 官方项目介绍 StarBlog支持Markdown导入的博客。后端基于最新的.Net6和Asp.Net Core框架,遵循REST…...
用git stash暂存修改
git stash命令用于保存当前工作目录的临时状态,包括暂存区和已修改但未暂存的文件。它会将这些修改保存在一个临时区域(即“堆栈”)中,让你能够回到一个干净的工作目录,可以进行其他操作。等到你完成其他任务后&#x…...
一个适合练手的接口测试实战项目——慕慕生鲜
前言 最近很多粉丝找小月要接口测试项目练练手,看看实力!今天,它来了 慕慕生鲜,完整版,文末有福利! 干货来咯,收藏好! 1. 接口测试需求分析 常见接口文档提供的两种方式 ①wor…...
window10/11 光学系统建模之Light Tools8.6 软件安装教程(亲测可用+附带免费资源可直接下载)
1.下载链接 (免费分享) 链接:https://pan.baidu.com/s/1qVubyRSC93xT-GKeK-k3ow 提取码:vkho 2.安装顺序 即按照图里的1234的顺序先安装完注册表,驱动,和lighttools的程序 我个人在win10系统安装这些程…...
Vue3+ElementPlus el-date-picker时间选择器,设置最多选择60天区间内,必须选择大于今天
Vue3ElementPlus el-date-picker时间选择设置, 必须选择大于今天;最多选择60天区间内; 使用disabled-date: 具体实现代码: <el-date-pickerv-model"state.queryParams.dateTime":editable"false&q…...
2022年亚太杯APMCM数学建模大赛B题高速列车的优化设计求解全过程文档及程序
2022年亚太杯APMCM数学建模大赛 B题 高速列车的优化设计 原题再现: 2022年4月12日,中国高铁复兴号CR450动车组在开放线上成功实现单车时速435公里,相对速度870公里,创造了高铁动车组列车穿越开放线和隧道速度的世界纪录。新一代…...
OSI网络分层模型
OSI英文全文是Open System Interconnection Reference Model,翻译成中文就是开放式系统互联通信参考模型。 OSI模型分成了七层,部分层次与 TCP/IP 很像,从下到上分别是: 第一层:物理层,网络的物理形式&…...
EOS区块链keosd的RPC API
list_wallets 查看钱包列表 post v1/wallet/list_walletsapi: http://127.0.0.1:8888/v1/wallet/list_walletsparams: 无returns: ["testnet *" ]testnet:钱包名称create 创建钱包 post v1/wallet/createapi: http://127.0.0.1:8888/v1/wallet/createpa…...
React +AntD + From组件重复提交数据(已解决)
开发场景: react Hooks andt 提交form表单内容给数据库(使用antd的form组件) 问题描述 提交是异步的,请提交方式是POST 方式 提交表单内容给后端,却产生了两次提交记录(当然,数据新增了两条数据)。可以…...
spring的简单使用(配合Druid操作数据库)
文章目录 准备数据pom.xml文件中引用需要的库准备好dao层接口和service层接口和实现类准备好 jdbc.properties 和 user.properties编写Druid的jdbcConfig配置类编写spring的配置类SpringConfig编写Dao层的实现类的逻辑测试类参考文献 准备数据 create database if not exists …...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
