定个小目标之每天刷LeetCode热题(3)

这是一道简单题,我这里就只讲两种解法

第一种是数组加双指针,先遍历链表将值存到数组里,然后分别从数组两端进行一一比较判断是否满足回文,代码实现

class Solution {
    public boolean isPalindrome(ListNode head) {
        List<Integer> vals = new ArrayList<Integer>();

        // 将链表的值复制到数组中
        ListNode currentNode = head;
        while (currentNode != null) {
            vals.add(currentNode.val);
            currentNode = currentNode.next;
        }

        // 使用双指针判断是否回文
        int front = 0;
        int back = vals.size() - 1;
        while (front < back) {
            if (!vals.get(front).equals(vals.get(back))) {
                return false;
            }
            front++;
            back--;
        }
        return true;
    }
}

第二种是快慢指针加链表反转,相比第一种会复杂点,但是节省了空间,先使用快慢指针确定前半部分链表的尾节点,这里需要注意当链表节点数为奇数时,则中间的节点看作是前半部分,然后对后半部分链表进行反转,最后分别从前半部分链表头节点和后半部分链表头节点开始依次进行遍历比较判断是否满足回文,无论是否是回文链表,我们都应该恢复链表,流程图如下,代码如下

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode temp = null;
        ListNode p = head, q = head.next;
        while(p.next != null) {
            p.next = temp;
            temp = p;
            p = q;
            q = q.next;
        }
        p.next = temp;
        return p;
    }

    public boolean isPalindrome(ListNode head) {
        ListNode h1 = head, h2 = null, end = null, p = head, q = head;
        if (h1.next == null) return true;
        //找到前半部分链表的尾节点
        while(q != null && q.next != null && q.next.next != null) {
            p = p.next;
            q = q.next;
            q = q.next;
        }
        h2 = p.next;
        end = p;
        end.next = null;
        //反转后半部分链表
        h2 = reverseList(h2);
        //判断是否回文
        p = h1;
        q = h2;
        while(p != null && q != null && p != q) {
            if (p.val != q.val) {
                //恢复链表
                end.next = reverseList(h2);
                return false;
            }
            p = p.next;
            q = q.next;
        }
        //恢复链表
        end.next = reverseList(h2);
        return true;
    }
}

 题目链接:题单 - 力扣(LeetCode)全球极客挚爱的技术成长平台

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

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

相关文章

88.合并两个有序数组

题目解析&#xff1a; 非递减顺序说明&#xff0c;是递增的数列。m 、n分别表示数列1 和 数列2中元素的个数&#xff0c;但是要注意的是&#xff0c;数列1的长度的是mn&#xff0c;不单纯的只是m&#xff0c;所以这里的m的含义需要特别注意。 这道题意思就是说&#xff0c;把列…

工控一体机10.1寸显示器电容触摸屏(YA07JK)产品规格说明书

如果您对工控一体机有任何疑问或需求&#xff0c;或者对如何集成工控一体机到您的业务感兴趣&#xff0c;可移步控芯捷科技。 一、硬件功能介绍 1.1 YA07JK介绍 YA07JK 是我公司推出的一款新型安卓屏&#xff0c;使用电容触摸屏。4 核 Cortex-A7 架构&#xff0c;主频1.2GHz …

STM32——启动文件选择及启动文件宏定义

文章目录 前提&#xff1a;以STM32F1xx系列芯片为例&#xff08;有方法&#xff0c;其他系列一样&#xff09;启动文件选择对应启动文件的寻找方法对应宏定义#define的寻找方法另外 前提&#xff1a;以STM32F1xx系列芯片为例&#xff08;有方法&#xff0c;其他系列一样&#x…

【YOLOv10的使用】YOLOv10的训练/验证/预测/导出模型/ONNX模型的使用

&#x1f680;&#x1f680;&#x1f680; YOLOv10: 实时端到端的目标检测 性能 YOLOv10比最先进的YOLOv9延迟时间更低&#xff0c;测试结果可以与YOLOv9媲美&#xff0c;可能会成为YOLO系列模型部署的“新选择”。 目录 1 安装 2 训练 3 验证 4 预测 5 导出模型 6 ONNX…

Ubuntu20.04升级到22.04之后出现的问题

项目场景&#xff1a; 之前一致使用的是Ubuntu20.04&#xff0c;虽然丑了点&#xff0c;但是用着没什么问题&#xff0c;最近没能按捺住好奇心&#xff0c;升级到了22.04&#xff0c;升级后颜值有所提高&#xff0c;但是也带来了一些问题。 从20.04升级到22.04&#xff0c;起始…

PG TOAST技术

1.Toast简介&#xff1a; Toast是超长字段在PG的一个存储方式&#xff0c;对于用户来说不用关注这一技术的实现&#xff0c;完全是透明的&#xff0c;它会将大字段值压缩或分散为多个物理行来存储&#xff0c;与Oracle的CLOB&#xff0c;BLOB类似。 2.Toast的存储方式&#xf…

基于STM32实现智能水下机器人控制系统

目录 引言环境准备智能水下机器人控制系统基础代码示例&#xff1a;实现智能水下机器人控制系统 电机控制深度传感器数据读取IMU传感器数据读取用户界面与显示应用场景&#xff1a;水下探测与环境监测问题解决方案与优化收尾与总结 1. 引言 本教程将详细介绍如何在STM32嵌入式…

【教程】利用API接口添加本站同款【每日新闻早早报】-每天自动更新,不占用文章数量

本次分享的是给网站添加一个每日早报的文章&#xff0c;可以看到本站置顶上面还有一个日更的日报&#xff0c;这是利用ALAPI的接口完成的&#xff01;利用接口有利也有弊&#xff0c;因为每次用户访问网站的时候就会增加一次API接口请求&#xff0c;导致文章的请求会因为请求量…

Java基础-注解

注解本质是继承了Annotation接口的一个接口 首先&#xff0c;我们通过键值对的形式可以为注解属性赋值&#xff0c;像这样&#xff1a;Hello&#xff08;value “hello”&#xff09;。 接着&#xff0c;你用注解修饰某个元素&#xff0c;编译器将在编译期扫描每个类或者方…

【官方YOLOV10代码训练验证自己的数据集】

*************************************************** 码字不易&#xff0c;收藏之余&#xff0c;别忘了给我点个赞吧&#xff01; *************************************************** Start 官方YOLOV10代码训练验证自己的数据集 官方论文&#xff1a;https://arxiv.…

JavaSE:String类常用方法(巨详细)

1、引言 在学习C语言时&#xff0c;我们就已经了解了字符串&#xff0c;但是在C语言中字符串只能用字符数组或者指针来表示&#xff0c;没有特定的字符串类型&#xff0c;而在Java中&#xff0c;我们有了字符串这一特定的类型---String类。 2、String类的常用方法 2.1 字符串…

鲲泰新闻|神州鲲泰创新智算之旅北京站开幕,发布全新智算架构和液冷整机柜产品应对 “多云、异构、绿色”挑战

5月17日&#xff0c;神州鲲泰智算中国行北京站盛大召开。在本次活动上&#xff0c;神州鲲泰针对用户对大模型训练、大算力需求的痛点&#xff0c;重磅发布多云异构环境下智算中心绿色着陆的产品及方案&#xff0c;包含异构智算调度运营平台HISO、异构智算加速平台HICA以及一体化…

pytest-sugar插件:对自动化测试用例加入进度条

摘要 在自动化测试过程中&#xff0c;测试进度的可视化对于开发者和测试工程师来说非常重要。本文将介绍如何使用pytest-sugar插件来为pytest测试用例添加进度条&#xff0c;从而提升测试的可读性和用户体验。 1. 引言 自动化测试是软件开发过程中不可或缺的一部分&#xff…

windows web提权

#Web到Win-系统提权-人工操作 如果提权中无法执行命令的话&#xff0c;可以尝试上传cmd.exe到可读写目录再调用 优点&#xff1a;解决实时更新不集成的EXP 缺点&#xff1a;操作繁琐&#xff0c;需要各种复现调试 1、信息收集 参考常见命令&#xff08;见上图&#xff09; …

ZYNQ EMIF进行PS与PL间的数据交互

1 概述 AXI-EMC IP 是一个可以可以支持各种内存型号的控制器,利用这个IP可以非常方便地模拟各种类型的内存或者FLASH接口实现数据的交互和通信。以下是AXI-EMC IP的功能特性: 1、支持AXI4 Slave Memory Map 接口,数据宽度为32位和64位 2、支持写入/读取寄存器的可选AXI4-Li…

帝国CMS如何修改时间格式,变成几分钟,几小时教程

该插件已经在帝国cms6.6上测试通过&#xff0c;至于其他版本&#xff0c;请自行测试。 目前支持&#xff1a;标签模板&#xff0c;列表模板&#xff0c;内容模板 安装说明&#xff1a; 把以下的内容复制到 /e/class/userfun.php 文件里&#xff08;放在<?php和?>之间…

kafka-偏移量图解

生产者偏移量&#xff1a;生产者发送消息时写入到哪个位置&#xff08;主题的每个分区会存储一个 leo 即将写入消息的偏移量&#xff09;&#xff0c;每次写完消息 leo 会 1 消费者偏移量&#xff1a;消费者从哪个位置开始消费消息&#xff0c;小于等于 leo&#xff0c;每个组…

低调收藏,这份MobaXterm使用指南很全面

中午好&#xff0c;我的网工朋友。 MobaXterm&#xff0c;这个名字对于我们这些经常需要在Windows环境下与Linux服务器打交道的人来说&#xff0c;应该并不陌生。它不仅仅是一个SSH客户端&#xff0c;更是一个功能强大的终端工具箱&#xff0c;集成了X服务器和Unix命令集&…

【深入学习Redis丨第一篇】Redis服务器部署详解

前言 小伙伴们大家好&#xff0c;我是陈橘又青&#xff0c;今天起 《深入学习Redis》 专栏开始更新。本专栏将专为希望深入了解Redis的开发者、系统架构师以及数据库爱好者而写的免费专栏。从Redis的基本概念入手&#xff0c;逐步深入到其内部实现和高级用法。希望能帮助你更好…

【Python】 深入理解 Python 包管理器:pip vs conda

基本原理 在Python编程世界中&#xff0c;包管理器是一个不可或缺的工具。它帮助开发者安装、更新和管理Python库。目前&#xff0c;最流行的两个包管理器是pip和conda。了解它们之间的区别&#xff0c;对于Python开发者来说至关重要。 pip pip是Python的官方包管理器&#…