数据结构习题--回文链表

数据结构习题–回文链表

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false
要求:
时间复杂度为O(n)
空间复杂度为O(1)

方法:反转后半链表

分析

因为要求使用O(1)空间复杂度,否则我们可以直接反转链表在一个一个比较,而因为不能开拓这种空间来存储链表,所以这里我们采取把原来的链表的后半部分反转,再与原来的链表的前半部分进行比较

  1. 先找到链表的中点
  2. 判断该链表奇偶,对慢指针进行处理
  3. 一一比较

代码

package LinkList;public class PalindromeList {/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/public class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) { this.val = val; }ListNode(int val, ListNode next) { this.val = val; this.next = next; }}class Solution {public boolean isPalindrome(ListNode head) {// 初始快慢指针ListNode fast = head;ListNode slow = head;// 这里采用的是反转后半部分链表的方法,当然也可以反转前面链表,大概流程差不多// 快指针每次移动两格,慢指针每次一格,当快指针跑到结尾时,慢指针恰好在中间while (fast != null && fast.next != null){fast = fast.next.next;slow = slow.next;}// 原来的链表分为奇数和偶数情况// 当是奇数情况时,最中间那个元素不用判断回文,而慢指针指向最中间那个元素,所以单独往后移动一格慢指针// 比如:12345 结束循环时,快指针在5,慢指针在3,而我们其实只需要反转45就行// 对于偶数链表: 1234,结束循环时,快指针在(1234null)中的null,慢指针在3.我们需要反转34// 所以当快指针不为null时,说明链表是奇数,需要处理慢指针if (fast != null){slow = slow.next;}// 反转后面链表slow = reverse(slow);// 快指针重新指向头结点fast = head;// 逐一比较每个结点while (slow != null){if (fast.val != slow.val){return false;}fast = fast.next;slow = slow.next;}return true;}public ListNode reverse(ListNode head) {ListNode nextNode = null;ListNode preNode = null;while (head != null){nextNode = head.next;head.next = preNode;preNode = head;head = nextNode;}return preNode;}}
}

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

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

相关文章

【期末复习向】智能信息系统前4章梳理

第四章 不确定性推理 [了解即可]4.1 不确定性概述 不确定性推理概念 所谓推理,就是从已知事实出发,运用相关的知识(或规则)逐步推出结论或者证明某个假设成立或不成立的思维过程。 不确定性方法分类 1.模型方法 a&#xff0…

芒果YOLOv8改进组合161:动态标签分配ATSS+新颖轻量化非对称多级压缩LADH检测头组合改进,LADH作为原创可以发表SCI顶刊论文,小目标高效涨点

💡本篇内容:【芒果YOLOv8改进ATSS标签分配策略|第四集】芒果YOLOv8改进组合161:动态标签分配ATSS+新颖轻量化非对称多级压缩LADH检测头组合改进,小目标高效涨点 💡🚀🚀🚀本博客 标签分配策略ATSS改进+ 新颖轻量化非对称多级压缩LADH检测头组合改进,适用于 YOLOv…

Centos7系统下安装Nginx并配置域名转发实现域名访问

感谢李天健同学辛苦创作,对于Nginx配置未完成的同学请移步他的博客。 传送门:Centos7系统下安装Nginx并配置域名转发实现域名访问 传送门2:1.24.0

Ubuntu查看端口状态

完蛋了,好像动心了,近一周吃啥东西都索然无味,这可如何是好!!!不知道在期待什么,恐惧与窃喜—— 在Ubuntu系统中,查看某个端口是否被放行(即允许流量通过)&am…

C++左值引用与右值引用

首先,我们需要知道什么是值语义,什么是引用语义。 值语义: 值语义意味着对象在被传递、赋值或拷贝时,会复制其整个数据。当使用值语义时,对对象进行操作不会影响原始对象,因为操作会在副本上进行。传统的…

WIFISKY 7层流控路由器 confirm.php RCE漏洞复现

0x01 产品简介 WIFISKY-7层流控路由器是一款可用于家庭或办公环境的无线路由器,具备流控功能以优化网络流量和提供更稳定的网络连接。该路由器采用了7层流控技术,能够依据网络数据包的内容进行智能管理,从而实现对网络流量的精细化控制和优化。这种技术可以提升网络的整体性…

营业执照OCR接口在电商行业中的具体应用

在当今快速发展的电子商务时代,营业执照OCR接口技术的应用为电商行业带来了深远的影响。这项技术通过自动识别和提取营业执照图像中的文字信息,不仅极大提高了数据处理的速度和准确性,而且还为电商平台的风险管理和用户体验优化提供了强有力的…

#! /usr/bin/env node 命令与 npm link 建立项目间软连接(一)

#! /usr/bin/env node js 代码… 这条指令通常出现在Node.js脚本文件的开头,它的作用是用来指定该脚本文件使用 /usr/bin/env 来寻找并执行 node 解释器。这里的 node 即Node.js的执行环境。 #!/usr/bin/env node 是Unix/Linux系统(包括Mac OS X&…

分享一个由systemd管理tomcat的tomcat.service文件的编写

如果你有一个tomcat的二进制包你就可以使用以下.service文件直接套用,前提是你必须先停止现有的tomcat cat tomcat.service[Unit] Descriptiontomcat server daemon # 描述 Aftersyslog.target network.target remote-fs.target nss-lookup.target # 在那些服务之…

001 redis高并发减库存

文章目录 释放锁加lua脚本String lockValue(唯一标识符作为锁的值)lua脚本无String lockValue(唯一标识符作为锁的值)无Lua脚本加锁的过期时间防死锁无lockValue代码 lockValue加了lockValue无lua脚本代码加了lockValue加了lua脚本…

【Java | 多线程】LockSupport 的使用和注意事项

了解一下 LockSupport LockSupport是一个类,位于java.util.concurrent.locks包中,提供了基本的线程同步机制。 LockSupport的主要作用是挂起和唤醒线程。它提供了两个主要的静态方法:park()和unpark()。 park():用于挂起当前线…

Harmony专栏 TypeScript教程

TypeScript教程 TypeScript简介TypeScript安装使用vscode开发TypeScript应用TypeScript编译器TypeScript基本语法TypeScript变量TypeScript let const var区别TypeScript 常量TypeScript数据类型TypeScript数字类型numberTypeScript字符串类型stringTypeScript 字符串常用函数…

thsi指针用法总结

1 c类对象中的变量和函数是分开存储的 2 所以对象共用一份成员函数,类的大小是指非静态的成员变量; this 完成链式操作 const 修饰成员函数

图像空间(IS),高级特征空间(FS)和两阶段(TS)重采样

what is the 3 types :image space (IS), high-level feature space (FS) and two-stage (TS) resampling? what is the difference? pros and cons? 这三种类型:图像空间(IS),高级特征空间(FS)和两阶段…

Kafka 3.x.x 入门到精通(02)——对标尚硅谷Kafka教程

Kafka 3.x.x 入门到精通(02)——对标尚硅谷Kafka教程 2. Kafka基础2.1 集群部署2.1.1 解压文件2.1.2 安装ZooKeeper2.1.3 安装Kafka2.1.4 封装启动脚本 2.2 集群启动2.2.1 相关概念2.2.1.1 代理:Broker2.2.1.2 控制器:Controller …

【Linux 开发第一篇】如何在安装中完成自定义配置分区

安装配置自定义配置分区 在安装Centos的过程中,我们可以在安装位置部分手动配置分区 选择我要配置分区,点击完成: 我们自动分区分为三个分区:boot分区(引导分区),swap(交换分区&…

云备份项目--项目介绍

📟作者主页:慢热的陕西人 🌴专栏链接:C云备份项目 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 主要内容项目一些详细信息的介绍 文章目录 云备份项目1.项目介绍…

ElasticSearch(3)

目录 126.ES聚合中的Metric聚合有哪些?如何解释? 127.ES聚合中的管道聚合有哪些?如何理解? 128.如何理解ES的结构和底层实现? 129.ES内部读取文档是怎样的?如何实现的? 130.ES内部索引文档是怎样的?如何实现的?</

WPS表格,怎样保留每个人的最近日期的那一行数据?

方法很多&#xff0c;这里演示使用排序删除重复项 来完成。具体操作如下&#xff1a; 1. 选中数据区域中任意一个单元格&#xff0c;注意要么全选数据区域&#xff0c;要么只选一个单元格 2. 点击数据选项卡&#xff0c;排序&#xff0c;自定义排序&#xff0c; 在弹出对话框…

告别互信息:跨模态人员重新识别的变分蒸馏

Farewell to Mutual Information: Variational Distillation for Cross-Modal Person Re-Identification 摘要&#xff1a; 信息瓶颈 (IB) 通过在最小化冗余的同时保留与预测标签相关的所有信息&#xff0c;为表示学习提供了信息论原理。尽管 IB 原理已应用于广泛的应用&…