2025澳门跑狗图片大全查询
要判断一个链表是否为回文链表,可以使用以下步骤:
使用两个指针来遍历链表,一个指针每次移动四肖中特期期准免费凤凰网 一步,另一个指针每次移动两步。这样,当快速移动的指针到达链表末尾时,慢速移动的指针将刚好到达链表的中间位置。
当慢速移动的指针到达中间位置时,将链表的后半部分进行反转。
比较链表的前半部分和反转后的后半部分。如果它们是相同的,那么链表是回文的;否则,它不是回文的。
下面是一个示例的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 是链表的长度。它只需要遍历链表两次,一次用于找到中间位置,另一次用于比较前半部分和后半部分的值。