力扣链表基础之链表相交
给你两个单链表的头节点 headA 和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回
null 。
示例
1 | 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 |
思路
设交集链表长c,链表1除交集的长度为a,链表2除交集的长度为b,有
- a + c + b = b + c + a
- 若无交集,则a + b = b + a

两个cur结点分别指向headA和headB,然后依次向后迭代,当迭代到最后一个结点时,切换到另一个分支。若有交点,迭代a + c + b次后会迭代到交集所在的节点;若无交点,迭代a + b次后会迭代到NULL节点,此时return headA和headB任意节点皆可。
代码
1 | func getIntersectionNode(headA, headB *ListNode) *ListNode { |