给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。示例 1:输入:head = [1,2,2,1]
输出:true
示例 2:输入:head = [1,2]
输出:false思路:可以用快慢指针 + 反转链表解决。使用快慢指针找到链表的中间位置,然后将链表分为两个部分 反转后半部分链表
逐一对比前后两部分链表
恢复链表
返回结果注意:如果链表长度是偶数的话,前半部分和后半部分长度是一样的。如果链表长度是奇数,那么 前半部分的长度比后半部分长度多 1 个,所以最后迭代链表的时候,以后半部分为准就可以了,当 链表总长为奇数时,前半部分的最后一个节点就不会被遍历到了。# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def isPalindrome(self, head: ListNode) -> bool:# 方法一# res = []# current = head# while current:#     res.append(current.val)#     current = current.next# return res == res[::-1]# 方法二if head is None:return True# 找到前半部分链表的尾节点并反转后半部分链表first_half_end = self.end_of_first_half(head)second_half_start = self.reverse_list(first_half_end.next)# 判断是否回文result = Truefirst_position = headsecond_position = second_half_startwhile result and second_position is not None:if first_position.val != second_position.val:result = Falsefirst_position = first_position.nextsecond_position = second_position.next# 还原链表并返回结果first_half_end.next = self.reverse_list(second_half_start)return result    def end_of_first_half(self, head):fast = headslow = headwhile fast.next is not None and fast.next.next is not None:fast = fast.next.nextslow = slow.nextreturn slowdef reverse_list(self, head):previous = Nonecurrent = headwhile current is not None:next_node = current.nextcurrent.next = previousprevious = currentcurrent = next_nodereturn previous

34. Leetcode 234. 回文链表 (链表-双指针)相关推荐

  1. LeetCode 234. 回文链表(快慢指针+链表反转)

    1. 题目 请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false示例 2: 输入: 1->2->2->1 输出: true进阶: 你能否用 O(n) ...

  2. leetcode - 234. 回文链表

    请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂 ...

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

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

  4. LeetCode 234 回文链表

    原题链接 解题思路:使用vector来存储链表,然后来检查其中每一个元素,是否组成回文 /*** Definition for singly-linked list.* struct ListNode ...

  5. leetcode 234. 回文链表(快慢指针+链表倒置)

    请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 代码 /*** Definitio ...

  6. Leetcode 234. 回文链表 解题思路及C++实现

    解题思路: 先用快慢指针找到链表的中间节点,然后将链表一分为二: 然后将后半部分链表进行翻转,用到三个指针: 接着分别遍历两个链表,逐个比较 val 值,如果出现不相等,就返回 false. /*** ...

  7. 【LeetCode】【HOT】234. 回文链表(存入数组)

    [LeetCode][HOT]234. 回文链表 文章目录 [LeetCode][HOT]234. 回文链表 package hot;import java.util.ArrayList; impor ...

  8. [234] 回文链表

    [234] 回文链表 //请判断一个链表是否为回文链表. // // 示例 1: // // 输入: 1->2 //输出: false // // 示例 2: // // 输入: 1->2 ...

  9. LeedCode篇:234. 回文链表

    234. 回文链表 题目: 解题思路: 源码: 踩坑点: 题目: 解题思路: 1.先用快慢指针找到中间节点 2.后半个链表逆置 3.然后一一比较 源码: bool isPalindrome(struc ...

最新文章

  1. ipad php mysql_PHP中的MYSQL常用函数
  2. 玩转webpack(一)下篇:webpack的基本架构和构建流程
  3. mysql遇到时区问题的坑(Java解决方案)
  4. Sql Server日期格式化
  5. 华为新系统鸿蒙和ios,鸿蒙系统呼之欲出 华为上线新功能和苹果iOS相比如何
  6. android platform下载地址
  7. 解决在IE6下使用display: inline-block;的不兼容性问题
  8. 如何从JavaScript中的对象数组中获得不同的值?
  9. cartographer编译过程遇到未定义的dlclose@@GLIBC_2.2.5
  10. @Html.DisplayFor 和 @mode.Display
  11. 对粒子滤波算法的理解 特别通俗易懂
  12. html5脑图_HTML5制作思维导图
  13. double转int方法为 去尾法
  14. IBM power小型机HMC管理口默认IP地址和ASMI默认密码
  15. 使用shell脚本写出乘法
  16. 傅里叶级数 三角形式 到 复数形式
  17. 鸡头稳如云台_稳如“鸡头”?魔爪Mini-MI智能手机三轴稳定器 开箱
  18. Linux的网络配置及jdk的安装
  19. 为你的梦想和目标去真正付出【时任树熊WIFI CTO时的一次内部分享】
  20. Scrum板与Kanban如何抉择?敏捷工具:xsqixhs板与按照ffgwtsmksy

热门文章

  1. tango with django(第三章 Django基础)
  2. Python第一弹--------初步了解Python
  3. cocos2d-x 关于tilemap滚动时黑线闪动的问题
  4. 【涛声依旧】华为的“大服务”
  5. ​linux 系统出现Give root password for maintenance 问题
  6. c++string 输入换行符
  7. WYSE率先支持RemoteFX功能
  8. Linux环境变量配置
  9. 记录一个找问题的经过
  10. IPv6扩展头部 (一) 扩展头部格式、类型与扩展选项