拍摄集

新澳2025年资料免费_最新资讯→点击查看更多

2025澳门跑狗图片大全查询

要判断一个链表是否为回文链表,可以使用以下步骤:

  1. 使用两个指针来遍历链表,一个指针每次移动四肖中特期期准免费凤凰网 一步,另一个指针每次移动两步。这样,当快速移动的指针到达链表末尾时,慢速移动的指针将刚好到达链表的中间位置。

  2. 当慢速移动的指针到达中间位置时,将链表的后半部分进行反转。

  3. 比较链表的前半部分和反转后的后半部分。如果它们是相同的,那么链表是回文的;否则,它不是回文的。

下面是一个示例的Python代码实现:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def isPalindrome(head):
    # 边界情况,空链表或只有一个节点的链表都是回文的
    if not head or not head.next:
        return True

    # 找到链表的中间位置
    slow = fast = head
    while fast and fast.next:
        slow = slow.next
        fast = fast.next.next

    # 反转链表的后半部分
    prev = None
    while slow:
        temp = slow.next
        slow.next = prev
        prev = slow
        slow = temp

    # 比较前半部分和反转后的后半部分
    while prev:
        if prev.val != head.val:
            return False
        prev = prev.next
        head = head.next

    return True

这个算法的时间复杂度是 O(n),其中 n 是链表的长度。它只需要遍历链表两次,一次用于找到中间位置,另一次用于比较前半部分和后半部分的值。

相关推荐