34. Leetcode 234. 回文链表 (链表-双指针)
给你一个单链表的头节点 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. 回文链表 (链表-双指针)相关推荐
- LeetCode 234. 回文链表(快慢指针+链表反转)
1. 题目 请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false示例 2: 输入: 1->2->2->1 输出: true进阶: 你能否用 O(n) ...
- leetcode - 234. 回文链表
请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂 ...
- Leetcode 234 回文链表 (每日一题 20210730)
请判断一个链表是否为回文链表.示例 1:输入: 1->2 输出: false 示例 2:输入: 1->2->2->1 输出: true题目地址:https://leetcode ...
- LeetCode 234 回文链表
原题链接 解题思路:使用vector来存储链表,然后来检查其中每一个元素,是否组成回文 /*** Definition for singly-linked list.* struct ListNode ...
- leetcode 234. 回文链表(快慢指针+链表倒置)
请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 代码 /*** Definitio ...
- Leetcode 234. 回文链表 解题思路及C++实现
解题思路: 先用快慢指针找到链表的中间节点,然后将链表一分为二: 然后将后半部分链表进行翻转,用到三个指针: 接着分别遍历两个链表,逐个比较 val 值,如果出现不相等,就返回 false. /*** ...
- 【LeetCode】【HOT】234. 回文链表(存入数组)
[LeetCode][HOT]234. 回文链表 文章目录 [LeetCode][HOT]234. 回文链表 package hot;import java.util.ArrayList; impor ...
- [234] 回文链表
[234] 回文链表 //请判断一个链表是否为回文链表. // // 示例 1: // // 输入: 1->2 //输出: false // // 示例 2: // // 输入: 1->2 ...
- LeedCode篇:234. 回文链表
234. 回文链表 题目: 解题思路: 源码: 踩坑点: 题目: 解题思路: 1.先用快慢指针找到中间节点 2.后半个链表逆置 3.然后一一比较 源码: bool isPalindrome(struc ...
最新文章
- ipad php mysql_PHP中的MYSQL常用函数
- 玩转webpack(一)下篇:webpack的基本架构和构建流程
- mysql遇到时区问题的坑(Java解决方案)
- Sql Server日期格式化
- 华为新系统鸿蒙和ios,鸿蒙系统呼之欲出 华为上线新功能和苹果iOS相比如何
- android platform下载地址
- 解决在IE6下使用display: inline-block;的不兼容性问题
- 如何从JavaScript中的对象数组中获得不同的值?
- cartographer编译过程遇到未定义的dlclose@@GLIBC_2.2.5
- @Html.DisplayFor 和 @mode.Display
- 对粒子滤波算法的理解 特别通俗易懂
- html5脑图_HTML5制作思维导图
- double转int方法为 去尾法
- IBM power小型机HMC管理口默认IP地址和ASMI默认密码
- 使用shell脚本写出乘法
- 傅里叶级数 三角形式 到 复数形式
- 鸡头稳如云台_稳如“鸡头”?魔爪Mini-MI智能手机三轴稳定器 开箱
- Linux的网络配置及jdk的安装
- 为你的梦想和目标去真正付出【时任树熊WIFI CTO时的一次内部分享】
- Scrum板与Kanban如何抉择?敏捷工具:xsqixhs板与按照ffgwtsmksy
热门文章
- tango with django(第三章 Django基础)
- Python第一弹--------初步了解Python
- cocos2d-x 关于tilemap滚动时黑线闪动的问题
- 【涛声依旧】华为的“大服务”
- ​linux 系统出现Give root password for maintenance 问题
- c++string 输入换行符
- WYSE率先支持RemoteFX功能
- Linux环境变量配置
- 记录一个找问题的经过
- IPv6扩展头部 (一) 扩展头部格式、类型与扩展选项