如果兩個鏈表相交,又都不存在環,那么從第一個相交點開始之后的結點都相同(構成了一個Y型)。因此,只要分別遍歷這兩個鏈表,找到末尾結點,如果末尾結點相同,即可確認相交。
如果要求這種情況的交點,由於相交部分全部都相同,所以彼此的長度差異存在於相交之前的部分。因此,只需要先得到兩個鏈表的差d,然后將較長的鏈表截去前d個結點;此時,兩個鏈表同時出發向后遍歷,第一個相等的結點即為交點。
class ListNode: def __init__(self, x): self.val = x self.next = None def node(l1, l2): length1, lenth2 = 0, 0 # 求兩個鏈表長度 while l1.next: l1 = l1.next length1 += 1 while l2.next: l2 = l2.next length2 += 1 # 長的鏈表先走 if length1 > lenth2: for _ in range(length1 - length2): l1 = l1.next else: for _ in range(length2 - length1): l2 = l2.next while l1 and l2: if l1.next == l2.next: return l1.next else: l1 = l1.next l2 = l2.next
