📌  相关文章
📜  检查字符串的链表是否形成回文(1)

📅  最后修改于: 2023-12-03 15:10:53.008000             🧑  作者: Mango

检查字符串的链表是否形成回文

在链表中检查字符串是否形成回文,是一道常见的面试题。我们可以采用快慢指针的方法,将链表的后半部分翻转,然后与前半部分进行比较,如果都相同,则说明链表是回文的。

算法流程
  1. 使用快慢指针找到链表的中心,将链表分为前半部分和后半部分。
  2. 翻转后半部分的链表。
  3. 将前半部分的链表和翻转后的后半部分链表进行比较。
  4. 如果全部相同,则说明链表是回文的,否则不是。
代码实现

以下是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)$。

总结

通过这道题目,我们学习了如何在链表中检查字符串是否形成回文。实现思路可以说是比较简单,但是也需要我们熟练掌握链表的基本操作,例如反转链表等。在面试中,如果遇到链表的相关题目,优秀的实现能力将会是一个很好的加分项。