拟人算法系列文章,以容易理解的方式描述算法,点赞收藏不迷路
链表相交
class Solution:
def get_intersection_node(self, headA: LinkedNode, headB: LinkedNode) -> LinkedNode:
lenA, lenB = 0, 0
cur = headA
while cur:
cur = cur.next
lenA += 1
cur = headB
while cur:
cur = cur.next
lenB += 1
curA, curB = headA, headB
if lenA > lenB:
curA, curB = curB, curA
lenA, lenB = lenB, lenA
for _ in range(lenB - lenA):
curB = curB.next
while curA:
if curA == curB:
return curA
curA = curA.next
curB = curB.next
return None # type: ignore
if __name__ == '__main__':
node1 = LinkedNode(1)
node2 = LinkedNode(2)
node3 = LinkedNode(3)
node1.next = node3
node2.next = node3
result = Solution().get_intersection_node(node1, node2)
assert result is not None
print(result.val) # 3
比如有两个人,先分别遍历两个链表统计长度,然后让对应长链表的人先走长度差那么多步,然后两个人同步走,他们每走一步就判断节点是否相同,如果相同即代表找到了相交的那个节点