题目

image.png

思路

image.png
设相交部分长度为c,链表A的长度为A,链表B的长度为B。
AD距离为a,BD距离为b。
A - a = B - b
转换后得,A + b = B + a。意味着如果链表相交,那么 遍历完A链表长度再走一段距离b 一定会相等于 遍历完B链表再走一段距离a。
如果不相交,A + B = B + A,最终共同指向None。

  1. # Definition for singly-linked list.
  2. # class ListNode:
  3. # def __init__(self, x):
  4. # self.val = x
  5. # self.next = None
  6. class Solution:
  7. def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
  8. a, b = headA, headB
  9. while a != b:
  10. a = a.next if a else headB
  11. b = b.next if b else headA
  12. return a