题目
本题自己根本解不出来 ,隔一段时间要自己重温
给你两个单链表的头节点 headA
和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null
。
图示两个链表在节点 c1
开始相交:
解题思路
用双指针的第一次相遇来解:(参考k神解法)
首先有快慢指针,fast和slow 简称为 f 和 s。
- f 运动速度是s 的2倍。 f=2s(这是两个关键指针的 内在联系)
- f 和s 目的是相遇,所以在走各自的路段以外 肯定是有相同的路段的 (这是外在联系,后面可以根据内外联系建议二元推导)
设链表有a+b个节点,然后a是头节点到相遇节点的距离, b是loop 长度(也就是f 进来以后一直循环等待s进来与其相遇的的环)
- 可以得到: f = s+nb (n是loop的循环次数,肯定是大于等于1的 因为fast指针一定会先于slow进来)
- 由 f= 2s 和 f = s+nb 可以构造另外一个等式:
2s &#