力扣链表基础之环形链表 II
给定一个链表的头节点 head
,返回链表开始入环的第一个节点。 如果链表无环,则返回
null。
示例

1 | 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 |
思路
使用快慢指针法,分别定义fast和slow指针,从头节点出发,fast指针每次移动两个节点,slow重镇每次移动一个节点,如果fast指针和slow指针在途中相遇,说明这个链表有环。
随后从头节点出发一个指针,从相遇节点也出发一个指针,这两个指针每次直走一个节点,那么当这两个指针相遇的时候就是环形入口的节点。
代码
1 | func detectCycle(head *ListNode) *ListNode { |