📜  数据结构 |链表 |问题 6(1)

📅  最后修改于: 2023-12-03 14:54:56.409000             🧑  作者: Mango

数据结构 |链表 |问题 6

在数据结构中,链表是常用的一种数据结构。在链表中,每个节点包含数据和指向下一个节点的指针。问题6是一个关于链表的问题。

问题描述

给定一个链表,判断该链表是否为回文。

示例 1:

输入: 1 -> 2 输出: false

示例 2:

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

解题思路

在解决该问题时,我们可以利用链表的特性。首先,我们可以使用快慢指针找到链表的中心节点。然后,我们将链表的后半部分反转。最后,我们将链表的前半部分与反转后的后半部分进行比较,如果相同则该链表为回文。

代码实现
class Solution:
    def isPalindrome(self, head: ListNode) -> bool:
        if not head or not head.next:
            return True
        fast = slow = head
        while fast and fast.next:
            fast = fast.next.next
            slow = slow.next
        prev = None
        while slow:
            cur = slow
            slow = slow.next
            cur.next = prev
            prev = cur
            
        while prev:
            if prev.val != head.val:
                return False
            prev = prev.next
            head = head.next
        return True

该方法的时间复杂度为O(n),空间复杂度为O(1)。