LeetCode 234. 回文链表

◇◆丶佛笑我妖孽 提交于 2019-12-02 23:24:06

LeetCode 234. 回文链表

请判断一个链表是否为回文链表。

示例 1:

输入: 1->2
输出: false

示例 2:

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

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

Python方法

  1. 使用快慢指针找到链表中点。
  2. 逆序后半部分。
  3. 两部分从头结点开始比较是否相同。
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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!