使用两个指针分别从两个链表的头结点开始向后走,当走完自身长度之后,从另一条链表的头结点开始向后走,当两个指针相遇(或同为空,即两条链表不相交)时,即为相交结点。
当两个指针相遇时,其均走了自身长度(相交结点之前+公共链表)+另一条链表的相交结点之前的部分。(加起来刚好长度相等)
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
curA, curB = headA, headB
while curA != curB:
curA = curA.next if curA else headB
curB = curB.next if curB else headA
return curA