当前位置: 首页 > news >正文

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


在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
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;                        //返回合并后的链表的头节点,即哨兵位的下一个节点}

相关文章:

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

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 刷题篇 一、回文链表1.1 题目描述1.2 思路分…...

linux错误处理函数

linux c之perror、exit_perror与exit-CSDN博客 linux网络编程&#xff08;三&#xff09; TCP通信时序与多进程/线程并发服务器的编写-阿里云开发者社区 函数简介篇——错误处理函数&#xff1a;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 的索引项目示例 &#x1f…...

MySQL基本操作之创建数据库

1、大小写敏感 一般大家都默认使用:小写 在MySQL中,大小写敏感性有两个方面的规定:lower_case_file_system和lower_case_table_names。 lower_case_file_system:指定操作系统文件系统是否对大小写敏感。 当设置为ON时,表示文件系统对大小写不敏感;当设置为OFF时,表示…...

8.对象贴地

愿你出走半生,归来仍是少年&#xff01; 在场景中&#xff0c;有时候需要对地物&#xff08;房屋、楼宇&#xff09;进行贴地处理&#xff0c;或者说相对地面高度&#xff08;井盖、井室&#xff09;进行设置。 通过自定义的Terrain切片以及影像瓦片构建的三维场景应该如何获取…...

AWS Lambda – 函数版本,别名,API网关,CodeDeploy协同

Hello大家好&#xff0c;我们今天继续讨论AWS Lambda的内容。 Lambda函数的版本 Lambda函数的版本和别名是辅助资源&#xff0c;我们可以通过创建这些资源管理函数的部署和调用。 首先&#xff0c;让我们来看一下Lambda 函数版本的概念。您可以使用版本来管理函数的部署。例…...

flutter doctor检测环境,出现CocoaPods installed but not working

1. 安装flutter, 地址: 安装和环境配置 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 2. 安装成功后&#xff0c;通过flutter doctor检测环境。以mac为例&#xff0c;出现了CocoaPods installed but not working 错误提示时&#xff0c;以下为解决方案: 2.1 rvm i…...

Python 条件和 if 语句

Python支持来自数学的通常逻辑条件&#xff1a; 等于&#xff1a;a b不等于&#xff1a;a ! b小于&#xff1a;a < b小于或等于&#xff1a;a < b大于&#xff1a;a > b大于或等于&#xff1a;a > b 这些条件可以以多种方式使用&#xff0c;最常见的是在"i…...

行业领先的三个企业正在利用聊天机器人变得更强

聊天机器人已成为客户服务领域的革命者&#xff0c;深刻地改变了企业与客户互动的方式。这些虚拟助手简化了交互&#xff0c;提供了24/7全天候高效和个性化的支持。凭借先进的技术和自然语言处理能力&#xff0c;聊天机器人擅长快速处理查询。 效率是聊天机器人的关键优势。它…...

「Git|场景案例」从项目中删除之前commit过的文件并且让git不追踪删除操作

本文主要介绍如何在git中删除文件但是让git不追踪这些删除操作 文章目录 场景说明解决方案删除一个文件删除一个文件夹以及子文件夹 场景说明 自己在使用react开发一个包含大量媒体文件的网站时&#xff0c;项目初期临时将这些媒体文件都放在项目中&#xff0c;直接使用访问本…...

一款.NET Core开源的基于Vue+ElementUI开发的博客系统 - StarBlog

前言 今天给大家推荐一款.NET Core开源的基于VueElementUI开发的博客系统 - StarBlog。该项目配套详细的文章教程&#xff0c;可以作为 .Net Core 入门项目学习。 官方项目介绍 StarBlog支持Markdown导入的博客。后端基于最新的.Net6和Asp.Net Core框架&#xff0c;遵循REST…...

用git stash暂存修改

git stash命令用于保存当前工作目录的临时状态&#xff0c;包括暂存区和已修改但未暂存的文件。它会将这些修改保存在一个临时区域&#xff08;即“堆栈”&#xff09;中&#xff0c;让你能够回到一个干净的工作目录&#xff0c;可以进行其他操作。等到你完成其他任务后&#x…...

一个适合练手的接口测试实战项目——慕慕生鲜

前言 最近很多粉丝找小月要接口测试项目练练手&#xff0c;看看实力&#xff01;今天&#xff0c;它来了 慕慕生鲜&#xff0c;完整版&#xff0c;文末有福利&#xff01; 干货来咯&#xff0c;收藏好&#xff01; 1. 接口测试需求分析 常见接口文档提供的两种方式 ①wor…...

window10/11 光学系统建模之Light Tools8.6 软件安装教程(亲测可用+附带免费资源可直接下载)

1.下载链接 &#xff08;免费分享&#xff09; 链接&#xff1a;https://pan.baidu.com/s/1qVubyRSC93xT-GKeK-k3ow 提取码&#xff1a;vkho 2.安装顺序 即按照图里的1234的顺序先安装完注册表&#xff0c;驱动&#xff0c;和lighttools的程序 我个人在win10系统安装这些程…...

Vue3+ElementPlus el-date-picker时间选择器,设置最多选择60天区间内,必须选择大于今天

Vue3ElementPlus el-date-picker时间选择设置&#xff0c; 必须选择大于今天&#xff1b;最多选择60天区间内&#xff1b; 使用disabled-date&#xff1a; 具体实现代码&#xff1a; <el-date-pickerv-model"state.queryParams.dateTime":editable"false&q…...

2022年亚太杯APMCM数学建模大赛B题高速列车的优化设计求解全过程文档及程序

2022年亚太杯APMCM数学建模大赛 B题 高速列车的优化设计 原题再现&#xff1a; 2022年4月12日&#xff0c;中国高铁复兴号CR450动车组在开放线上成功实现单车时速435公里&#xff0c;相对速度870公里&#xff0c;创造了高铁动车组列车穿越开放线和隧道速度的世界纪录。新一代…...

OSI网络分层模型

OSI英文全文是Open System Interconnection Reference Model&#xff0c;翻译成中文就是开放式系统互联通信参考模型。 OSI模型分成了七层&#xff0c;部分层次与 TCP/IP 很像&#xff0c;从下到上分别是&#xff1a; 第一层&#xff1a;物理层&#xff0c;网络的物理形式&…...

EOS区块链keosd的RPC API

list_wallets 查看钱包列表 post v1/wallet/list_walletsapi: http://127.0.0.1:8888/v1/wallet/list_walletsparams: 无returns: ["testnet *" ]testnet&#xff1a;钱包名称create 创建钱包 post v1/wallet/createapi: http://127.0.0.1:8888/v1/wallet/createpa…...

React +AntD + From组件重复提交数据(已解决)

开发场景&#xff1a; react Hooks andt 提交form表单内容给数据库(使用antd的form组件) 问题描述 提交是异步的&#xff0c;请提交方式是POST 方式 提交表单内容给后端&#xff0c;却产生了两次提交记录&#xff08;当然&#xff0c;数据新增了两条数据&#xff09;。可以…...

spring的简单使用(配合Druid操作数据库)

文章目录 准备数据pom.xml文件中引用需要的库准备好dao层接口和service层接口和实现类准备好 jdbc.properties 和 user.properties编写Druid的jdbcConfig配置类编写spring的配置类SpringConfig编写Dao层的实现类的逻辑测试类参考文献 准备数据 create database if not exists …...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

前端工具库lodash与lodash-es区别详解

lodash 和 lodash-es 是同一工具库的两个不同版本&#xff0c;核心功能完全一致&#xff0c;主要区别在于模块化格式和优化方式&#xff0c;适合不同的开发环境。以下是详细对比&#xff1a; 1. 模块化格式 lodash 使用 CommonJS 模块格式&#xff08;require/module.exports&a…...

高保真组件库:开关

一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...

欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!

多连接 BLE 怎么设计服务不会乱&#xff1f;分层思维来救场&#xff01; 作者按&#xff1a; 你是不是也遇到过 BLE 多连接时&#xff0c;调试现场像网吧“掉线风暴”&#xff1f; 温度传感器连上了&#xff0c;心率带丢了&#xff1b;一边 OTA 更新&#xff0c;一边通知卡壳。…...