LeetCode 234. 回文链表
请判断一个链表是否为回文链表。
示例 1:
输入: 1->2
输出: false
示例 2:
输入: 1->2->2->1
输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
Python方法
- 使用快慢指针找到链表中点。
- 逆序后半部分。
- 两部分从头结点开始比较是否相同。
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def isPalindrome(self, head: ListNode) -> bool:
fast = slow = head
# 找到中间的节点
while fast and fast.next:
fast = fast.next.next
slow = slow.next
# 后半段逆序
pre = None
nxt = None
while slow:
nxt = slow.next
slow.next = pre
pre = slow
slow = nxt
# 比较前半段和后半段节点
while pre and head:
if pre.val != head.val:
return False
pre = pre.next
head = head.next
return True
来源:CSDN
作者:旺仔大包子
链接:https://blog.csdn.net/qq_33314190/article/details/88871186