Leetcode 234. 回文链表

【力扣题解 Day 17】234. 回文链表 力扣算法打卡记录 阅读详情

题目

请判断一个链表是否为回文链表。

示例 1:

输入: 1->2
输出: false

示例 2:

输入: 1->2->2->1
输出: true

进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

解答

解法一:使用栈

要点如下:

  1. 遍历时压栈,并计算链表长度。
  2. 逐个比较前一半的数据是否与栈中的数据相同即可。

复杂度:O(n) 的时间, O(n) 的空间。

代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isPalindrome(ListNode head) {
        if(head == null || head.next == null) return true;
        
        int n = 0; 
        LinkedList<ListNode> stack = new LinkedList<>();
        ListNode p = head;
        while(p != null) {
            stack.push(p);
            p = p.next;
            n ++;
        }
        
        p = head;
        for(int i = 0; i < n / 2; i ++) {
            if(p.val != stack.pop().val) return false;
            p = p.next;
        }
        
        return true;
    }
}
结果

在这里插入图片描述

解法二:快慢指针定中点,翻转后半部分

具体过程:

  1. 先使用快慢指针找到中点。
  2. 然后将后半部分翻转。
  3. 建立两个指针一一比对即可。

复杂度:O(n) 的时间,O(1) 的空间

代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isPalindrome(ListNode head) {
        if(head == null || head.next == null) return true;
        
        ListNode slow = head;
        ListNode fast = head.next;
        while(fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
        }        
        
        ListNode right = reverseList(slow.next);
        slow.next = null;
        while(head != null) {
            if(right == null) return true;
            if(head.val != right.val) return false;
            head = head.next;
            right = right.next;
        }
        
        return true;
    }
    
    private ListNode reverseList(ListNode head) {
        if(head == null || head.next == null) return head;
        
        ListNode newHead = reverseList(head.next);
        head.next.next = head;
        head.next = null;
        
        return newHead;
    }

}

结果

在这里插入图片描述

14003.xilinx系统移植 文章目录1 xilinx 系统移植 sd卡版本1.1 创建项目1.2 拷贝 *.hdf 到工程目录1.3 根据hdf文件对系统进行配置1.3.1 设置内核源码路径为本地1.3.2 设置分区的名称与大小1.4 清除本地缓存并编译成功1.5 打包生成BOOT.BIN并拷贝到sd卡1.6 问题1.7 系统启动成功1.8 配置设备树文件丰富系统外设 1 xilinx 系统移植 sd卡版本 芯片型号 ZYNQ UltraScale+ XAZU2EG ,对应厂家提供的demo板为 zu102或zu104 1.1 创建 阅读详情

相关推荐

DeepSeek-V4 本地部署实战指南:4套方案从入门到企业级(附RTX 5090实测数据)

V4-Flash 便宜是便宜,输入 1 元/M token,输出 2 元/M token,但量大了还是肉疼。V4-Pro 更离谱,输入 12 元/M token,输出 24 元/M token,这价格要是天天调用,月账单轻松破万。用 4-bit 量化跑 V4-Flash,显存占用 ~22GB,延迟 ~80ms/token,并发能到 2-3 路。换句话说,同样的硬件,能跑更长的上下文、更大的并发。Flash 是「小而美」,一张 RTX 4090/5090 就能跑,门槛低,效果够用。

datayx的文章 9822

【刷题之路】LeetCode 234. 回文链表

其实这一步是可有可无的,而我们必须要做的是将后半部分反转后的链表的尾节点的next置空。我们需要额外创建一个全局的指针,在每次递归中,如果本次递归满足前面的节点的val和后面的节点的val相同,就让前面的节点往后走一步。递归的思路其实类似于双指针,先让递归一层层深入,直到走到链表的尾,在通过一层层的返回来模拟指针从后往前走的动作。空间复杂度:O(n),空间复杂度主要取决于递归的最大深度,这里的最大深度就是链表的长度,故空间复杂度为O(n)。所以说,将前半部分的尾置空的操作是可有可无的。

kk702392702的博客 1177

在win10系统上安装opnet14.5注意事项和步聚

opnet 14.5安装避坑!

miracle_eicont的专栏 1037

【LeetCode力扣】234 快慢指针 | 反转链表 | 还原链表

234. 回文链表 - 力扣(LeetCode)判断回文,就是判断是否是对称的。有些朋友对于数组的回文判断非常熟悉,但是对链表的回文判断可能就无从下手了,其实都一样的。有一种非常简单的方式就是将链表转化成数组,然后就是判断该数组是否回文就可以了,这种方式统称暴力破解法,简单粗暴。下面就来先带着大家看一下这道题的暴力破解法。

Hacynn的博客 1496

手把手教你学SOME/IP「1.0•概述」

本文介绍了SOME/IP协议的基本概念和主要特点。SOME/IP全称为"Scalable service-Oriented MiddlewarE over IP",是一种面向服务的车载嵌入式通信协议,支持远程过程调用、事件通知等功能。文章指出SOME/IP是AUTOSAR标准的一部分,在车载以太网架构中处于应用层位置,负责服务调度和通信封装。协议具有可扩展性强、资源消耗低、兼容性好等优势,能满足汽车电子领域对实时性、可靠性的严格要求。同时,文章也说明了SOME/IP的正确书写规范,并解释

nihaoljq2010的博客 676

高压控制单元与接触器 —— BMS电池的“高压大门”

高压接触器在BMS电池管理系统中扮演着“高压大门”的角色,负责控制电池包与整车高压母线的连接与隔离。接触器的工作原理基于线圈产生的磁力吸合接点,通过主触点接通高压电流路径,辅助触点检测状态,灭弧结构保护接点。预充电路的设计是为了避免直接连接大电容时产生的浪涌电流冲击,通过预充电阻逐步充电,确保系统安全上电。接触器控制策略包括顺序控制、辅助触点检测、温度监控、故障断电和背靠背MOS辅助控制,以确保系统的高效和安全运行。工程师在选择接触器型号、控制线圈、检测状态、软件冗余控制和预充失败保护等方面提供了具体建议。

weixin_43199439的博客 812

leetcode:234.回文链表(详解)

前言:内容包括-题目,代码实现,大致思路,代码解读

weixin_73142957的博客 1006

maya导入导出bvh 自动 脚本

maya打开bvh脚本

jacke121的专栏 1550

LeetCode 234.回文链表的四种解法

LeetCode 234.回文链表的四种解法:数组前后指针法、利用栈判断是否文回文链表、递归方法、快慢指针法+逆置链表判断+修复链表

CS_boy的博客 646

基于TKVA与深度学习的量子点微型光谱仪光谱重建改进算法研究

本文提出了一种融合深度学习的改进TKVA算法(TKVA-DL),用于提升量子点微型光谱仪的光谱重建精度。该方法创新性地结合深度先验网络与注意力机制,通过自适应学习光谱隐式先验替代传统固定正则化项,并动态加权探测器响应通道。实验表明,所提方法在仿真和实测数据上均显著优于传统TKVA及主流深度学习算法,RMSE降低35%,PSNR提升4.2 dB,同时保持物理可解释性。完整MATLAB实现验证了方法的有效性与可复现性,为微型光谱仪的高精度重建提供了新思路。 关键词:量子点微型光谱仪;光谱重建;Tikhonov正

AI的内部世界的博客 81

【华为OD】华为性格测试(综合测试)高分策略

1、性格测试非常重要,是一次否决制,18 个月有效期,所以态度一定要认真对待,不要随便乱选;2、做题原则:正向原则,积极乐观向上3、时间为 25-30 分钟,会频繁出现重复选项重复出现的题目注意一致性。

笑着的程序员的博客 3万+

LeetCode题解:234.回文链表

回文链表 一、LeetCode题解 瞧一瞧~ 博健的LeetCode题解:Gitbook版本传送门 博健的LeetCode题解:优快云传送门 前端进阶笔记:Gitbook传送门 二、算法题 题目 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 解法一(快慢指针+反转链表)...

余光的博客 1796

Linux驱动学习--HCI框架及源码分析

目录 一、引言 二、HCI框架 三、pcm_read简要分析 一、引言 最近一直在分析蓝牙驱动,发现在底层驱动与上层协议栈间还有一层HCI,主机控制层,两者之间通过HCI协议通讯 而Linux也将HCI协议抽象层了一个框架。 为上层提供一个统一的接口,让上层协议不依赖于具体硬件的实现。HCI在硬件中的固件与HCI在主机端的驱动通信方式有多种,比如像 UART、USB和PC Card等等。hci_core.c相当于一个框架,用于把各种具体通信方式绞合起来,并提供一些公共函数的实现。 今天就来简单的分析一下 二

文艺小少年的博客 2002

【简单】力扣算法题解析LeetCode234:回文链表

题目要求判断单链表是否为回文结构。解法采用快慢指针找中间节点,反转后半部分链表,再比较前后部分。关键步骤包括: 快慢指针定位中间节点; 反转后半部分链表; 双指针遍历比较节点值; 恢复原链表结构。 时间复杂度O(n),空间复杂度O(1)。代码实现通过边界处理、链表反转和恢复确保高效性。 核心优化:快慢指针+局部反转,避免额外空间消耗。

ylumwd的博客 1541

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

leetcode力扣234题回文链表暴力解法

【代码】leetcode力扣234题回文链表暴力解法。

xiaohao0001abc的博客 268

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

《LeetCode力扣练习》第234题 回文链表 Java

《LeetCode力扣练习》第234题 回文链表 Java 一、资源 题目: 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head = [1,2,2,1] 输出:true 示例 2: 输入:head = [1,2] 输出:false 提示: 链表中节点数目在范围[1, 105] 内 0 <= Node.val <= 9 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

XRT_knives的博客 389

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LeetCode 234. 回文链表(Java)

回文链表 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palindrome-linked-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 ...

nuts_and_bolts的博客 161

234. 回文链表 - 力扣(LeetCode)

然后将反转后的链表与前半段未反转的链表做比较,直到中间节点如果对应相同,则为回文数。将反转后的后半部分链表与原链表的前半部分逐个节点比较,如果所有对应节点的值都相等,则链表是回文的;fast 和 fast.next 都存在(fast 指向 1,fast.next 指向 2)。从中间节点开始,逐个将节点从原链表中取出,并将其插入到新链表的头部,从而实现反转。此时,反转后的后半部分链表为 1 -> 2 -> 3,pre 指向节点 1。此时,slow 指向节点 3,fast 指向节点 1。

q1111111da的博客 826

LeetCode 234. 回文链表

欢迎关注我的 力扣github仓库,有JavaScript和C++两个版本,每日更新 写在前面: 这题好无语,dev跑的结果和oj平台不一样,害我调试那么久 我是通过快慢指针+后半段反转的方式解决的,也可以快慢指针+前半段反转或者快慢指针+栈 等等方式 C++: /** * Definition for singly-linked list. * struct ListNode { * ...

Gary的博客 267

Leetcode 234. 回文链表

Leetcode 234. 回文链表 1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/palindrome-linked-list/   可以使用数组解决该问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。 2、问题解决   笔者以C++方式解决。 #include "iostream" using namespace std; #include "a

珍惜 8764

回文链表力扣234

emplace_back` 和 `push_back` 都是 C++ 中 `std::vector` 的成员函数,用于向容器尾部添加元素,但它们在实现方式和性能上有显著区别:1. 参数传递方式接受一个已构造好的对象(拷贝或移动),然后将该对象添加到 `vector` 末尾。// 拷贝构造// 移动构造(如果 Foo 支持移动语义)

2301_81834780的博客 645

力扣 234 回文链表

快慢指针 找中点(注意奇偶) 分开 反转后半链 比较(以后半链为主) class Solution { public: bool isPalindrome(ListNode* head) { ListNode *p=new ListNode(-1);//预先指针 ListNode *fast=p; ListNode *low=p; ...

qq_40519283的博客 376

力扣 234. 回文链表

​ 本文仅仅简单讲解了《234. 回文链表》这一题目,对链表和数组结合应用有了一定的掌握 ​

m0_51787573的博客 648

golang力扣leetcode 234.回文链表

234.回文链表234.回文链表题解代码 234.回文链表 234.回文链表 题解 思路:取中点分成两个链表,翻转第二个,开始比较,注意其中一个为nil就可以停止了,因为有可能节点为奇数的情况 代码 package main type ListNode struct { Val int Next *ListNode } func findMiddle(head *ListNode) *ListNode { slow := head fast := head.Next for fast !=

清风 753

【LeetCode】234. 回文链表

为了养成创作习惯,从今天起开始刷力扣了,只刷简单和中等难度的题,分类刷,这个月就先刷链表题,从简单的开始按着顺序刷,一天一道,养生做法。为了锻炼一下自己,决定用 C 来写,据说是受苦,不过一天一道无所谓了。

m0_62051288的博客 260

234.力扣LeetCode_回文链表

本文介绍了判断单链表是否为回文结构的算法,主要步骤包括:1)使用快慢指针找到链表中间节点进行分割;2)反转后半段链表;3)同时遍历前半段和反转后的后半段进行值比较;4)还原链表结构。算法通过三指针法实现链表反转,确保空间复杂度为O(1),时间复杂度为O(n)。在判断过程中会保留原链表结构,比较失败时立即恢复链表,最后无论是否回文都会还原链表。这种方法高效且不破坏输入数据,适用于需要判断链表回文性的场景。

2401_82472941的博客 424
上一篇: Leecode 206. 反转链表
下一篇: Leetcode 237. 删除链表中的节点
一纸浮萍
博客等级 码龄9年 11粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值