题目
如果一个链表中包含环,从链表头节点开始顺着next指针方向进入环的第1个节点为环入口节点。
现在已知头结点 head ,求定位入口节点。
思路:
差速法 - 快慢指针相遇时扣n圈,调整起始位置可令二者刚好在入口节点相遇。
步骤:
1.定位“相遇点” - 快慢指针同时从头出发,定位扣圈相遇点(这个动作也可用于判断链表是否有环,并返回环内一个节点,很有用!)
2.P1从头节点出发,P2从相遇点出发,再相遇时即是入口节点
样例(来自剑指Offer第四章Q22):
已知图中链表头结点指针,返回内容应为入口节点3的指针
先把例题链表创建出来:
'''定义链表节点'''
class ListNode():
def __init__(self, item):
self.item = item
self.next = None
'''创建样例链表'''
arr = [1,2,3,4,5,6]
n = len(arr)
head = ListNode(arr[0])
cur = head
for i in range(1,n):