160. 相交链表
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
解题:双指针
- 如果两条链表有交点且不一样长:我们让两个指针走共同的长度(链表A独立的部分+共同链表的长度+链表B独立的部分),最终在同一点相遇。
- 如果两条链表没有交点:两个指针在走完同样的长度(链表A+链表B)后同时为空,并返回空
- 如果两个链表有交点且一样长:两个指针会直接在节点相遇
所以,我们的目的是让他们走相同的长度,并返回“相遇”的节点
代码
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
cur_1, cur_2, tem = headA, headB, None
while cur_1 != cur_2:
cur_1 = cur_1.next if cur_1 else headB
cur_2 = cur_2.next if cur_2 else headA
return cur_1