思路:
1、快慢双指针,先判断是否有环,无环返回NULL,有环找到环内第一次交点
2、然后快指针回到链表头,与慢指针一起单步遍历
3、第二次相遇,既为入口地址
注意:
**找环内第一个相遇点时,一定要先移动指针,再判断是否相遇,因为初始化快慢指针均指向链表头,如果不移动,则直接满足相遇并退出**
class Solution:
def EntryNodeOfLoop(self, pHead):
if not pHead:
return
slow, fast = pHead, pHead
# 找环内第一次相遇点
while True: # 快慢指针先移动再判断,如果以fast及fast.next是否为空为循环条件,如果出现单节点则快慢指针不会移动,最后返回第一个节点为答案
# 判断是否有环
if not fast or not fast.next:
return
fast = fast.next.next
slow = slow.next
# 判断环内第一次交点
if fast == slow:
break
# 快指针移动到链表头
fast = pHead
# 快慢指针共同遍历
while fast != slow:
fast = fast.next
slow = slow.next
return fast