【LeetCode热题100】--234.回文链表

news2024/11/25 7:47:55

234.回文链表

image-20230926195941387

快慢指针:

将链表的后半部分反转(改变链表结构),然后将前半部分和后半部分进行比较。比较完成后我们应该将链表恢复原样。虽然不需要恢复也能通过测试用例

使用快慢指针在一次遍历中找到链表的中间位置:慢指针一次走一步,快指针一次走两步,快慢指针同时出发。当快指针移动到链表的末尾时,慢指针恰好到链表的中间。通过慢指针将链表分为两部分。

/**
 * 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; }
 * }
 */
class Solution {
    public boolean isPalindrome(ListNode head) {
        if(head == null){
            return true;
        }
        //找到前半部分链表的尾节点并反转后半部分链表
        ListNode firstHalfEnd = endOfFirstHalf(head);
        ListNode secondHalfStart = reverseList(firstHalfEnd.next);

        //判断是否是回文
        ListNode p1 = head;
        ListNode p2 = secondHalfStart;
        boolean result = true;
        while(result && p2 != null){
            if(p1.val != p2.val){
                result = false;
            }
            p1 = p1.next;
            p2 = p2.next;
        }
        //还原链表并返回结果
        firstHalfEnd.next = reverseList(secondHalfStart);
        return result;
    }

    //翻转链表
    private ListNode reverseList(ListNode head){
        ListNode pre = null;
        ListNode cur = head;
        while(cur!=null){
            ListNode next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
    //使用快慢指针找到链表中间的位置
    private ListNode endOfFirstHalf(ListNode head){
        ListNode fast = head;
        ListNode slow = head;
        while(fast.next != null && fast.next.next != null){
            fast = fast.next.next;
            slow = slow.next;
        }
        return slow;
    }
}

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

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

相关文章

【红外与可见光图像融合】离散平稳小波变换域中基于离散余弦变换和局部空间频率的红外与视觉图像融合方法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

003:如何画出成交量的柱状图

接着《002:如何画出收盘价的曲线图》,继续画成交量柱状图。 import pandas as pd import matplotlib.pyplot as plt# 读取CSV文件,指定逗号作为分隔符 data pd.read_csv(002885.csv, sep,)# 提取成交量和日期数据 volume data[成交量] dat…

tailwind使用教程以及tailwind不生效的问题

以Vite项目为例 我们先安装依赖文件 生成文件 yarn add -D tailwindcss postcss autoprefixer npx tailwindcss init -p配置tailwind.config.js文件 /** type {import(tailwindcss).Config} */ export default {content: ["./index.html","./src/**/*.{vue,j…

基于MWORKS.Sysplorer的油气混合作动筒建模与仿真应用

作为常见的线性传动装置,液压作动筒因其高功率密度和传动平稳、可控性好等特点而被广泛应用于各领域。常规的液压作动筒以油液为介质传递动力,其原理结构如图1所示。液压油从无杆腔进入,推动作动筒活塞伸出;或从有杆腔流入&#x…

递归的总结和案例

①使用递归的方法获取1-100的总和 function sum(num){ if(num 1){ return num 1 }else { return numsum(num-1) } } let num 100 let numSum sum(num) console.log(numSum,numSum) ②数组求和 function arrSum (arr){ let len arr.length…

第十四届蓝桥杯大赛软件赛决赛 C/C++ 大学 B 组 试题 B: 双子数

[蓝桥杯 2023 国 B] 双子数 试题 B: 双子数 【问题描述】 若一个正整数 x x x 可以被表示为 p 2 q 2 p^2 \times q^2 p2q2,其中 p p p、 q q q 为质数且 p ≠ q p \neq q pq,则 x x x 是 一个 “双子数”。请计算区间 [ 2333 , 233333333333…

数据结构-在堆中插入或删除新元素

目录 在堆中插入新元素 在堆中删除元素 知识回顾 在堆中插入新元素 首先插入13(这里我们依据的是小根堆原则,遇到大根堆也是类似的) (1)将新元素放到队列的队尾,在完全二叉树里面显示的是堆底 如下图…

ElasticSearch - 基础概念,以及和 mysql 的对比

目录 一、ElasticSearch 基础概念 1.1、文档(document) 1.2、索引(index) 1.3、映射(mapping) 二、对比 mysql 2.1、概念对比 2.2、适用场景对比 2.2.1、那是不是说,有了 es 之后&#…

Win10下获取海康威视网络串流(顺便求教Ubuntu服务器做法)

如果有摄像头专供充电器最好,那样可以用交换机,而且可以用海康威视官方的(大概)400密码重置助手获取摄像头IP地址,并做账号初始化等工作 我是一开始还有充电器的时候做了账号初始化,但是现在找不着充电器了…

java - 数组工具类Arrays

目录 前言 一、Arrays是什么? 二、常用方法 1.toString():将数组转换为字符串形式。 2. binarySearch():在已排序的数组中查找指定元素的索引。 3.fill():将数组的所有元素都设置为指定值。 4. copyOf():将一个数组的部分或…

【实训项目】益农小程序

1.项目背景 受到疫情影响,农作物物流运输受阻、产品滞销,给农民的“菜园子”和市民的“菜篮子”带来不少影响,一边是农民种植的蔬菜、草莓等地产农副食品滞销,一边是城区居民买不到新鲜、实惠的农副产品。 有很多地区&#xff0…

【解决方案】‘create’ is not a member of ‘cv::aruco::DetectorParameters’

‘create’ is not a member of ‘cv::aruco::DetectorParameters’ 在构建AruCo标定板标定位姿代码的过程中,发现代码中认为create并不是aruco::DetectorParameters的成员函数,这是因为在4.7.0及以上的OpenCV版本中,对ArUco的代码做调整&…

【KingFusion】如何在3D场景实现流水效果

哈喽,大家好,我是雷工! 在项目过程中,经常会涉及到实现管道水流动效果,此篇记录在KingFusion中的3D场景实现水流效果。 以下为简单流水效果的样例, 一、效果展示 当点击水泵,水泵启动,显示流水…

Linux开篇指南针环境安装(第一课)

Linux开篇指南针(第一课) 1 LINUX 系统介绍 Linux是一种自由和开放源代码的类UNIX操作系统,它最初由芬兰的林纳斯托瓦兹在1991年创建。Linux是一种多用户、多任务操作系统,可以在各种硬件平台上运行,包括桌面、移动设备、服务器和超级计算机…

JavaScript项目1_猜数字(前导)

● 本节,我们将做这样的一个小游戏,意思就是随机生成一个数字,然后你去猜测,本文不涉及HTML和CSS的代码,如果有需要的话可以私信我! document.querySelector() document.querySelector() 是 JavaScript 中…

vue2.x 迭代更新项目去掉缓存处理

找到build文件下的webpack.prod.conf.js文件 定义一个常量version const Version new Date().getTime(); 然后在.js和.css前面加上.${Version}就可以了(注意得把原本的换成)

Dink进阶之路

1、环境变量 cat /etc/profile #flink需要 export HADOOP_CLASSPATHhadoop classpath export HADOOP_CONF_DIR/etc/hadoop/conf2、Flink配置 2.1、flink-conf.yaml jobmanager.rpc.address: node-146 jobmanager.rpc.port: 6123 # 设置jobmanager总内存 jobmanager.memory.…

MongoDB(二)基础操作 创建、删除,查询等

mongodb有一个特点,如果某个库,库下面没数据(mongodb成集合),该库等于不存在的 mongodb只要创建一个库,在库下写入数据,该库才会生成 mongoshe [-hhost -pxxx] 创建数据库 use 数据库名 # 如果…

阿里巴巴OceanBase介绍

前言 官网地址:https://www.oceanbase.com/ OceanBase是由蚂蚁集团完全自主研发的国产原生分布式数据库,始创于2010年。是全球唯一在 TPC-C 和 TPC-H 测试上都刷新了世界纪录的国产原生分布式数据库。 2010年,创始人阳振坤加入阿里巴巴&…

华为云云耀云服务器L实例评测|华为云云耀云服务器L实例CentOS的存储和备份策略

1 华为云云耀云服务器L实例介绍 华为云云耀云服务器L实例是华为云计算服务中的一种虚拟云服务器,它提供了强大的计算资源,可以在云端运行各种应用程序和服务。 华为云服务器提供了多种实例类型,包括通用型、计算优化型、内存优化型等&#…