题目:

请检查一个链表是否为回文链表。

进阶:
你能在 O(n) 的时间和 O(1) 的额外空间中做到吗?

分析:

  1. 该题不够严谨,要满足时间、空间复杂度要求,应该要求链表无环
  2. 回文链表要求正逆方向对应位置节点值相同
  3. 不考虑时间、空间复杂度,可以一次遍历链表,比较正反列表对应节点值是否一致,这样时间复杂度满足O(n),但空间复杂度为O(n)
  4. 为使空间复杂度满足O(1)只可以新增常数级内存空间,而链表为单向,无法逆向遍历,需要在满足O(1)空间复杂度的情况下对一半链表进行反转,以达到对原链表两端逆向遍历的目的
  5. 为实现上述目的,可以通过两倍速指针和单倍指针同时运动,当快速指针指向链表末端时,慢速指针会指向链表中部
  6. 移动慢速指针,反转链表后一半,并将慢速指针指向反转后链表的头部
  7. 同时移动慢速链表指针和原链表指针,比对节点值,一直到慢速指针指向空

代码:

class Solution(object):def isPalindrome(self, head):""":type head: ListNode:rtype: bool"""fast = headlow = headif not head:return Truewhile fast and fast.next:fast = fast.next.nextlow = low.nextif fast == head:return Trueif fast:low = low.nextprev = Nonecurr = lowwhile curr:curr = curr.nextlow.next = prevprev = lowlow = currlow = prevwhile low:if low.val != head.val:return Falselow = low.nexthead = head.nextreturn True

思考:

  1. 该代码运行效率优于leetcode中91%的case

leet234.回文链表相关推荐

  1. LeetCode每日一题:回文链表(No.234)

    题目:回文链表 请判断一个链表是否为回文链表. 复制代码 示例: 输入: 1->2 输出: false输入: 1->2->2->1 输出: true 复制代码 思考: 先用快慢 ...

  2. 链表-回文链表(复制+双指针法)

    题意: 请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 思路: 这里如果是数组列表 ...

  3. 【剑指Offer专题】链表系列:从尾到头打印链表、反转链表、回文链表、合并两个排序的链表(C++和Python实现)...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 剑指Offer(三):从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每 ...

  4. python回文链表_leetcode链表之回文链表

    序 本文主要记录一下leetcode链表之回文链表 题目 请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2-> ...

  5. 判断字符串_python实现--判断回文字符串、回文链表、回文数

    所谓回文字符串,就是正读和反读都一样的字符串,比如"level"或者"noon"等等就是回文串.即是对称结构Python系列教程,免费获取,遇到bug及时反馈, ...

  6. 34. Leetcode 234. 回文链表 (链表-双指针)

    给你一个单链表的头节点 head ,请你判断该链表是否为回文链表.如果是,返回 true :否则,返回 false .示例 1:输入:head = [1,2,2,1] 输出:true 示例 2:输入: ...

  7. Leetcode 234 回文链表 (每日一题 20210730)

    请判断一个链表是否为回文链表.示例 1:输入: 1->2 输出: false 示例 2:输入: 1->2->2->1 输出: true题目地址:https://leetcode ...

  8. python 回文链表

    | 回文链表 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表.如果是,返回 true :否则,返回 false . 输入:head = [1,2,2,1] 输出:true 输入:he ...

  9. LeetCode Algorithm 面试题 02.06. 回文链表

    面试题 02.06. 回文链表 Ideas 这题当时左神也讲过,用的是快慢指针,不过感觉好麻烦,不如直接遍历链表,把元素值存到数组,然后判断是不是回文数组就OK了. Code C++ class So ...

最新文章

  1. oracle省市表,省市之一 创建全国省市Sql表
  2. ospf hello时间和dead_深入理解OSPF协议----第二讲:OSPF报文类型
  3. Java 洛谷 P1152 欢乐的跳
  4. 完整mes代码(含客户端和server端_200行代码实现基于paxos的kv存储
  5. oracle简写sql,Oracle通过sqlplus编辑sql命令
  6. react学习(59)--this.props语法糖
  7. 【例1】 给定n(n>=1),用递归的方法计算1+2+3+4+...+(n-1)+n。
  8. Spring框架----Spring的依赖注入
  9. 使用nginx部署网站
  10. 蓝绿部署、滚动部署、灰度发布、金丝雀发布-概念介绍---应用部署001
  11. country-converter官方文档----机翻人工确认
  12. 切比雪夫多项式拟合 matlab,如何用matlab实现多项式拟合?要源代码
  13. pano2vr 缩略图添加场景名称
  14. nginx + tomcat 504 解决方案
  15. 阿里巴巴推进中国中产阶级奢侈消费
  16. CSS3中的元素过渡属性transition
  17. Mocking Techniques for Go
  18. oracle gi和gc的区别,gl值(gi值跟gl值有什么区别)
  19. Windows 11 任务栏、菜单栏无故消失解决方案
  20. 互联网快讯:京东公布“双11”节奏;猿辅导、掌门教育布局素质教育

热门文章

  1. [高通SDM450][Android9.0]CTA认证--去掉录音功能
  2. 鸿蒙时期人物排行榜,《永生》之战力排行榜,那些经典角色你还记得吗
  3. 長野の方言「ほうげん」
  4. VB.net 图片刷新闪烁 解决方案
  5. Cass10.1独立地物简码识别功能
  6. Linux学习之Kali制作简单的Windows的木马,创建后门
  7. 胡须清洗的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  8. 《普陀区加快发展网络安全产业实施意见》的通知
  9. 十六进制编辑器HxD Hex Editor x64 v2.3.0.0
  10. vue v-for遍历动态展示元素数量