📅  最后修改于: 2023-12-03 15:08:06.662000             🧑  作者: Mango
在一个链表中,如果一个节点前后等距与另一个节点,那么这两个节点就是一对。现在我们需要在这个链表中找到一对节点,使得它们之间的距离最长。
我们可以考虑先遍历一次链表,得到链表的长度,然后针对每个节点向后遍历并计算距离,直到遇到距离节点等于链表长度一半的节点。如果找到了这样一对节点,更新最大距离。最后返回最大距离即可。
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def maxDistance(self, head: ListNode) -> int:
# 统计链表节点个数
count = 0
cur = head
while cur:
count += 1
cur = cur.next
# 遍历链表寻找最大距离
max_dist = 0
cur = head
while cur:
dist = 0
temp = cur.next
# 向后遍历并计算距离
while temp:
dist += 1
if dist == count // 2:
max_dist = max(max_dist, dist*2)
if dist > count // 2:
break
temp = temp.next
cur = cur.next
return max_dist
遍历链表两次,时间复杂度为O(N^2),其中N为链表的长度。
只使用了常数级别的额外空间,空间复杂度为O(1)。