检查链表是否回文

        根据回文对称的特点,不难想到将链表分成前后两部分,然后将其中一部分反转的方法。

        可以使用快慢指针的方式找到链表的中点,其中快指针每次移动两步,慢指针每次移动一步。当快指针到达链表末尾时,慢指针指向的位置即为链表的中点。

        然后将链表的后半部分反转,比较前半部分和反转后的后半部分,从而判断链表是否为回文链表。

    public boolean isPalindrome(ListNode head) {// 初始化快慢指针,均指向链表头部ListNode fast = head;ListNode slow = head;// 使用快慢指针找到链表中点while (fast != null && fast.next != null) {fast = fast.next.next;slow = slow.next;}// 反转后半部分链表ListNode root = null;while (slow != null) {ListNode tmp = slow.next;slow.next = root;root = slow;slow = tmp;}// 比较前半部分和反转后的后半部分链表fast = head;while (root != null) {// 如果节点值不相等,说明链表不是回文链表,返回 falseif (fast.val != root.val) {return false;}// 移动指针fast = fast.next;root = root.next;}// 遍历完成,说明链表是回文链表,返回 truereturn true;}

        这段代码中在处理奇数长度的链表时选择保留中间节点,当然你也可以选择舍弃比较中间节点。如下:

    public boolean isPalindrome(ListNode head){// 如果链表为空或只有一个节点,认为是回文链表if (head == null || head.next == null){return true;}// 使用快慢指针找到链表中点ListNode slow = head;ListNode fast = head.next;// 当链表长度是奇数时,循环结束时slow位于中间节点的前一个节点while (fast.next != null && fast.next.next != null){fast = fast.next.next;slow = slow.next;}// 获取后半部分链表的头节点ListNode secondHalf = slow.next;if (fast.next != null){// 当链表长度是奇数时,就要多移动一步secondHalf = slow.next.next;}// 切断前半部分链表与后半部分链表的连接slow.next = null;// 比较前半部分和反转后的后半部分链表是否相等return equals(secondHalf, reverseList(head));}// 比较两个链表是否相等private boolean equals(ListNode head1, ListNode head2){while (head1 != null && head2 != null){if (head1.val != head2.val){return false;}head1 = head1.next;head2 = head2.next;}return head1 == null && head2 == null;}// 反转链表private ListNode reverseList(ListNode head) {ListNode prev = null;ListNode cur = head;while (cur != null) {ListNode next = cur.next;cur.next = prev;prev = cur;cur = next;}return prev;}

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

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

相关文章

第四篇:SQL语法-DDL-数据定义语言

大年初一限定篇😀 (祝广大IT学习者、工作者0 error 0 warning!) 一,DDL数据库操作 (一)库的查询操作 1.列出所有已定义数据库 show databases; 2.查询当前所处数据库 select database(); &…

(2014)什么科学理念应该准备退休 -- 标准差 by Nassim Nicholas Taleb

标准差(Standard Deviation)在科学领域引起了广泛的困惑,现在是将其从常用的统计方法中替换为平均偏差(one of mean deviation, 比如 MAD )的时候了。 原文链接:2014 : WHAT SCIENTIFIC IDEA IS READY FOR RETIREMENT? 标准差&am…

幻兽帕鲁服务器价格大PK,阿里云、腾讯云和华为云?

2024年幻兽帕鲁服务器价格表更新,阿里云、腾讯云和华为云Palworld服务器报价大全,4核16G幻兽帕鲁专用服务器阿里云26元、腾讯云32元、华为云26元,幻兽帕鲁专用服务器4核16G、8核32G、16核32G等配置,公网带宽10M、12M、15M、22M及3…

【UE 游戏编程基础知识】

目录 0 引言1 基础知识1.1 拓展:3D数学和计算机图形学的关系 🙋‍♂️ 作者:海码007📜 专栏:UE虚幻引擎专栏💥 标题:【UE 游戏编程基础知识】❣️ 寄语:书到用时方恨少,事…

Blazor SSR/WASM IDS/OIDC 单点登录授权实例4 - 部署服务端/独立WASM端授权

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor SSR/WASM IDS/OIDC 单点登录授权实例2-登录信息组件wasmBlazor SSR/WASM IDS/OIDC 单点登录授权实例3-服务端…

探索现代Web前端开发框架:选择最适合你的工具

在当今快速发展的Web开发领域,前端开发框架的选择显得尤为关键。这些框架可以帮助我们更高效地构建出交互性强、性能卓越的用户界面。本文将带你了解几个当前最受欢迎的Web前端开发框架,并帮助你根据自己的需求选择最合适的工具。 1. React React由Fac…

Linux操作系统基础(七):Linux常见命令(二)

文章目录 Linux常见命令(二) 一、kill命令 二、ifconfig命令 三、clear命令 四、重启与关机命令 五、which命令 六、hostname命令 七、grep命令 八、|管道 九、useradd命令 十、userdel命令 十一、tar命令 十二、su命令 十三、ps命令 Linu…

【JavaEE】传输层网络协议

传输层网络协议 1. UDP协议 1.1 特点 面向数据报(DatagramSocket)数据报大小限制为64k全双工不可靠传输有接收缓冲区,无发送缓冲区 UDP的特点,我理解起来就是工人组成的**“人工传送带”**: 面向数据报(…

第6章 智能租房——前期准备

学习目标 了解智能租房项目,能够说出项目中各模块包含的功能 熟悉智能租房项目的开发模式与运行机制,能够复述项目的开发模式与运行机制 掌握智能租房项目的创建,能够独立创建智能租房项目 掌握智能租房项目的配置,能够为智能租…

Deepin基本环境查看(九)【被封印的创世神】

文章目录 - 相关文章目录1、概述2、Deepin中的创世神和管理员1)创世神root2)root被封印原因3)其他的神灵【管理员】 3、神殿管理【su与sudo】1)su(Switch User)2)sudo(Superuser Do&…

2024-2-11-复习作业

1> 要求&#xff1a; 源代码&#xff1a; #include <stdio.h> int fun(int n) {if(n0) return 1;return n*fun(n-1); } int main(int argc, char const *argv[]) {/* code */int n;printf("enter n :");scanf("%d",&n);int sfun(n);printf(…

(已解决)将overleaf上的文章paper上传到arxiv上遇到的问题。

文章目录 前言初级问题后续问题 前言 首先说一点&#xff0c;将paper的pdf文件直接上传arxiv是不行的&#xff0c;arxiv要求我们要上传源文件&#xff0c;所以才这么麻烦。 初级问题 首先上传文件之后有可能会在下面这个界面出现问题&#xff0c;这里一般都比较常见的问题&a…

OpenCV入门:图像处理的基石

在数字图像处理领域&#xff0c;OpenCV&#xff08;开源计算机视觉库&#xff09;是一个不可或缺的工具。它包含了一系列强大的算法和函数&#xff0c;使得开发者可以轻松地处理图像和视频数据。本文将带你走进OpenCV的世界&#xff0c;了解其基本概念和常见应用。 1. OpenCV简…

了解数据治理体系化建模

目录 一、走近数据体系化建模 &#xff08;一&#xff09;软件体系化建模 &#xff08;二&#xff09;数据体系化建模 二、数据体系化建模实践 三、数据管理考量思考 &#xff08;一&#xff09;数据质量方面的考量 &#xff08;二&#xff09;数据安全、合规方面的考量…

机器学习:特征工程笔记

在实践中&#xff0c;收集到的数据往往是不完整、含有噪声和不一致的&#xff0c;这对模型的性能构成挑战&#xff0c;因为其很大程度上依赖于输入数据的质量&#xff0c;因此&#xff0c;特征工程应运而生。特征工程是数据预处理和机器学习的重要环节&#xff0c;包括从原始数…

sheng的学习笔记-docker部署数据库oracle,mysql

部署目录&#xff1a;sheng的学习笔记-部署-目录-CSDN博客 docker基础知识可参考 sheng的学习笔记-docker部署&#xff0c;原理图&#xff0c;命令&#xff0c;用idea设置docker docker安装数据库 mac版本 安装oracle 下载oracle镜像 打开终端&#xff0c;输入 docker s…

服务器被黑,安装Linux RootKit木马

前言 疫情还没有结束&#xff0c;放假只能猫家里继续分析和研究最新的攻击技术和样本了&#xff0c;正好前段时间群里有人说服务器被黑&#xff0c;然后扔了个样本在群里&#xff0c;今天咱就拿这个样本开刀&#xff0c;给大家研究一下这个样本究竟是个啥&#xff0c;顺便也给…

gem5学习(17):ARM功耗建模——ARM Power Modelling

目录 一、Dynamic Power States 二、Power Usage Types 三、MathExprPowerModels 四、Extending an existing simulation 五、Stat dump frequency 六、Common Problems 官网教程&#xff1a;gem5: ARM Power Modelling 通过使用gem5中已记录的各种统计数据&#xff0c;…

Java:字符集、IO流 --黑马笔记

一、字符集 1.1 字符集的来历 我们知道计算机是美国人发明的&#xff0c;由于计算机能够处理的数据只能是0和1组成的二进制数据&#xff0c;为了让计算机能够处理字符&#xff0c;于是美国人就把他们会用到的每一个字符进行了编码&#xff08;所谓编码&#xff0c;就是为一个…

《CSS 简易速速上手小册》第3章:CSS 响应式设计(2024 最新版)

文章目录 3.1 媒体查询基础&#xff1a;网页的智能眼镜3.1.1 基础知识3.1.2 重点案例&#xff1a;适应三种设备的响应式布局3.1.3 拓展案例 1&#xff1a;改变字体大小3.1.4 拓展案例 2&#xff1a;暗模式适配 3.2 响应式图片和视频&#xff1a;让内容自由呼吸3.2.1 基础知识3.…