LeetCode 面试金典面试题 02.06. 回文链表

面试题 02.06. 回文链表 在这个问题中,最重要的挑战是如何在O(n)时间和O(1)空间复杂度下检查链表是否为回文链表。通过使用快慢指针找到中点,并反转链表的后半部分,结合逐个节点的比较,我们能够在不使用额外空间的情况下完成这一任务。这种方法不仅高效,而且空间复杂度最优,是解决此问题的最佳方法。 阅读详情

编写一个函数,检查输入的链表是否是回文的。

示例 1:

输入: 1->2
输出: false
示例 2:

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-linked-list-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

O(n) 时间复杂度和 O(1) 空间复杂度解法:
先找到中间点,把后半部分反转,然后开始比较前后两段是否相等。

class Solution {
    public boolean isPalindrome(ListNode head) {
        if(head == null || head.next == null) {
            return true;
        }
        int count = 0;
        ListNode node = head;

        while(node != null) {
            node = node.next;
            count++;
        }
        int i = 0;
        node = head;
        ListNode pre = node;
        int mid = (count)/2;
        while(i < mid) {
            i++;
            pre = node;
            node = node.next;
        }
        if(count %2 ==1) {
            node = node.next;
        }
        pre.next = null;
        // 反转后半段
        ListNode node_pre = node;
        ListNode node_pre_pre = null;

        while(node != null && node.next != null) {
            node_pre = node;
            node = node.next;
            node_pre.next = node_pre_pre;
            node_pre_pre = node_pre;
            if(node.next == null) {
                node.next = node_pre;
                break;
            }
        }
//        node.next = node_pre;
        ListNode head_node = head;
        // 比较前后两部分是否相等
        while(head_node != null) {
            if(head_node.val != node.val ) {
                return false;
            }
            head_node = head_node.next;
            node = node.next;
        }
        return true;
    }
}
数据工程师——ETL 文章摘要 ETL(数据抽取、转换、加载)是数据处理的核心流程,负责将分散数据源整合为高质量数据。ETL与ELT的主要区别在于转换步骤顺序,分别适用于不同规模数据场景。数据仓库通过ETL从多个数据源集成数据,支持分析决策。维度建模中的事实表记录业务指标,维度表提供上下文信息。缓慢变化维度(SCD)处理随时间变化的维度数据,常见类型包括直接覆盖型、新增版本型等。数据清洗解决数据缺失、重复、错误等问题,确保数据质量。数据血缘记录数据流转路径,便于问题排查和影响分析。常用ETL工具如Kettle通过转换和作业实现数 阅读详情

相关推荐

《幸福工厂》1.2版本从零开始:自动化生产线规划与物流优化实战指南

自动化生产线是现代工业软件和游戏设计的核心概念,它通过预设的逻辑和流程,将原材料自动转化为目标产品,其原理在于资源输入、加工处理与成品输出的有序衔接。这项技术的价值在于极大提升了生产效率与规模,减少了人工干预。在游戏开发、工业仿真乃至实际生产管理等领域,自动化理念都有广泛应用。本文聚焦于《幸福工厂》1.2版本,深入探讨如何运用蓝图系统与物流网络优化等新特性,系统性地从零规划高效工厂。文章将结合生产链配平与模块化设计等工程实践,解析如何搭建稳定电力系统、管理复杂传送带与管道网络,并应对中后期规模化挑战,为玩家

weixin_33913332的博客 688

StarRocks FE启动异常

服务器断电,StarRocks FE 启动失败。

qq_15138049的博客 1112

【Python】【难度:简单】Leetcode 面试题 02.06. 回文链表

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

thomashhs12的博客 233

OpenCompass实战:从零部署大模型评测平台,量化模型能力选型

在大模型技术选型与评估中,客观、可量化的评测体系是工程实践的关键。其核心原理在于通过标准化的数据集、统一的评测方法与自动化流程,将主观的模型体验转化为可比较的指标数据。这种评测框架的技术价值在于解决了模型能力评估的模糊性问题,为开发者提供了模型选型、效果对比与迭代优化的科学依据。典型的应用场景包括对比不同开源模型在代码生成、逻辑推理等特定任务上的性能,或是评估微调后模型在业务数据集上的提升效果。OpenCompass作为开源的大模型全能力评测平台,正是这一理念的工程化实现。它通过模块化的四层流水线架构和配置

weixin_28725037的博客 626

基于deepseek本地模型的本地知识库构建

通过以上步骤,你已经成功构建了一个基于 AnythingLLM 和 LM Studio 的本地知识库。这个系统不仅能够高效地存储和检索知识,还能结合强大的语言模型生成准确的回答。你可以根据自己的需求进一步扩展和优化这个系统,比如增加更多的文档格式支持、优化检索算法等。

qq_30178745的博客 1381

LeetCode234 &《程序员面试金典》面试题 02.06. 回文链表

LeetCode 面试题 02.06. 回文链表题目解题解题一:反转并比较解题二:迭代法解法三:递归法 题目 解题 要解决这个问题,可以将回文 (palindrome) 定义为 0 -> 1 -> 2 -> 1 -> 0。显然,若链表是回文,不管正着看还是反着看,都是一样的。 解题一:反转并比较 做题目的时候可能是脑子出去神游了,竟然特开心地在反转链表时没有new node,直接拿的原链表节点,结果把原链表给改了,比较的时候就比较了个寂寞。以后解题之前应该先判断一下原链表是否可以被

414

避开这些坑!Kaggle数据集下载常见问题及解决方案(含Header Editor插件配置)

本文针对Kaggle数据集下载过程中的常见难题,提供了系统性的解决方案。重点解决了验证码无法显示、API安装失败、密钥文件配置错误及下载命令执行问题,并详细介绍了使用Header Editor插件配置请求头以绕过验证码障碍的实战方法,帮助用户高效获取数据。

weixin_29043895的博客 301

《程序员面试金典》解题目录(更新完毕)

题目来源于LeetCode上的《程序员面试金典》,这里做一个目录方便大家查找。另外有本人的LeetCode解题目录、《剑指Offer》解题目录可点击链接查看。

Michael是个半路程序员 6409

Apollo EM Planner中路径-速度解耦优化的数学建模与仿真分析

摘要 Apollo EM Planner采用路径-速度解耦优化策略解决自动驾驶运动规划问题。该算法将时空轨迹规划分解为路径规划和速度规划两个子问题:首先在静态环境下生成几何最优路径,再优化沿路径的速度曲线。通过五次多项式表示路径和速度,构建包含平滑性、安全性、舒适性的多目标优化函数,并引入弹性模型处理动态障碍物约束。算法具有解耦优化、弹性适应、实时求解等特点,适用于高速公路、城市交叉口等多种场景。数学建模包括路径几何优化、速度动态优化和弹性势能函数,最终生成满足车辆动力学和环境约束的安全轨迹。

走向CTO的路上... 933

有之以为利,无之以为用,在 RAP 开发里的虚实取舍

摘要(149字) SAP RAP框架通过"有"与"无"的哲学平衡实现业务应用价值。其"有"体现在CDS视图、行为定义、服务绑定等具体对象,为系统提供形体;而"无"则表现为保留的扩展空间、未暴露的实现细节和框架托管的生命周期。在采购审批应用中,RAP既通过明确定义的行为模型建立业务语义,又通过验证、动作等机制保持灵活性。这种架构既确保核心功能稳固,又为未来演进留出余地,印证了"有之以为利,无之以为用"的技术智慧

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1303

程序员面试金典总结 - leetcode 程序员面试金典系列

程序员面试金典总结

随便发挥的博客 857

手把手教你学PCIE(10.5)--PCIE故障排除方法的分步排查法介绍

通过以上分步排查法,你可以系统地诊断和解决 PCIe 设备的故障。每个步骤都有助于逐步缩小问题范围,最终找到并解决问题。

MHD0815的博客 1872

程序员面试金典-面试题02.07-链表相交

程序员面试金典-面试题02.07-链表相交 今天才发现《程序员面试金典》就是经典的《Cracking the Coding Interview》,在国外很有名,看来值得做完。 这个题目是判断两个链表的相交节点,C语言直接用“==”判断struct是否相等就是判断的内存位置,让我联想到java中没有指针,那么怎么判断两个对象是同一个那?让我又联想到之前的面试,问一堆等于号和equals()的区别。其实java中等于号和没有重写的equals()函数就是判断的内存位置。 给定两个(单向)链表,判定它们是否相交并

MyNuTh的博客 287

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

程序员面试金典-面试题02.06-回文链表

程序员面试金典-面试题02.06-回文链表 编写一个函数,检查输入的链表是否是回文的。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palindrome-linked-list-lcci 著作权归领扣网络所有。商业转载请

MyNuTh的博客 295

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

程序员面试金典 - 面试题 02.06. 回文链表(快慢指针+链表反转)

1. 题目 编写一个函数,检查输入的链表是否是回文的。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palindrome...

Michael是个半路程序员 1234

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

链表经典面试题下

链表经典面试题目详解下

A13569039691的博客 1425

LeetCode专题 ——《程序员面试金典》

文章目录 下面只给出答案,具体题目请参考:LeetCode专题 ——《程序员面试金典》

aift的专栏 1709

链表经典面试题01

首先题目要求判断两个链表是否相交,若相交返回相交的起始节点,否侧返回NULL,那么第一个问题如何判断两个链表是否相交呢?这次的题均来自力扣和牛客有关链表的经典面试题,代码只会展示最优的解法,之前发布过单链表的经典算法--这里就涉及了两个算法,一个是找到链表的中间节点并返回,一个是翻转链表.这两个算法大家可以去看。,请你找出并返回两个单链表相交的起始节点。给你两个单链表的头节点。本题相对原题稍作改动。

wer24_25的博客 1830

顺序表和链表经典面试题

经典面试题讲解

黄超的博客 1283

leetcode 面试题 02.06. 回文链表

面试题 02.06. 回文链表 难度简单12 编写一个函数,检查输入的链表是否是回文的。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next =.

fang156239305的博客 229

【算法专题】《程序员面试金典 - 学习计划 - 力扣(LeetCode)》学习大纲 & 学习笔记(持续更新中......)

【算法专题】程序员面试金典 - 学习计划 - 力扣(LeetCode)

Shipley_Leo的博客 3402

LeetCode2 两数相加 &《程序员面试金典》面试题 02.05. 链表求和

LeetCode2 两数相加 & 面试题 02.05. 链表求和题目解法简单版解法进阶版解法 题目 注意这边有两个问题:[简单版] 和 [进阶版] 解法 简单版解法 // javascript var addTwoNumbers = function(l1, l2) { let sum = 0, carry = 0; let ResNode = new ListNode(0); const ResHead = ResNode; while (l1 !== null

285

力扣链表oj面试题,保姆级图解

OJ链表看不懂?看了代码还不会?保姆级讲解,图文搭配,肯定让你懂!数据结构的逻辑性非常强,还涉及到了数学,单单看代码是很难理解的,这里从0开始给你讲解链表的oj面试题,每一题都有图文进行讲解,且题目全都出自力扣官网!

A1546553960的博客 1324
上一篇: LeetCode 程序员面试金典 面试题 03.05. 栈排序
下一篇: LeetCode 面试金典 面试题 02.08. 环路检测
wenkun97
博客等级 码龄10年 15粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值