📅  最后修改于: 2023-12-03 14:54:56.409000             🧑  作者: Mango
在数据结构中,链表是常用的一种数据结构。在链表中,每个节点包含数据和指向下一个节点的指针。问题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)。