📅  最后修改于: 2023-12-03 15:10:53.008000             🧑  作者: Mango
在链表中检查字符串是否形成回文,是一道常见的面试题。我们可以采用快慢指针的方法,将链表的后半部分翻转,然后与前半部分进行比较,如果都相同,则说明链表是回文的。
以下是Python的代码实现:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverseList(head: ListNode) -> ListNode:
"""
反转链表
"""
pre, cur = None, head
while cur:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
return pre
def isPalindrome(head: ListNode) -> bool:
if not head or not head.next:
return True
slow, fast = head, head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
if fast: # 链表长度是奇数
slow = slow.next
left, right = head, reverseList(slow) # left是前半链表的头节点,right是后半链表反转后的头节点
while right:
if left.val != right.val:
return False
left = left.next
right = right.next
return True
时间复杂度:$O(n)$,其中 $n$ 是链表的长度。
空间复杂度:$O(1)$。
通过这道题目,我们学习了如何在链表中检查字符串是否形成回文。实现思路可以说是比较简单,但是也需要我们熟练掌握链表的基本操作,例如反转链表等。在面试中,如果遇到链表的相关题目,优秀的实现能力将会是一个很好的加分项。