1.题目
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
2.思路
(1)可以借鉴前面判断链表里面是否有环的思想:设立一个快指针,一个慢指针。快指针一次走两步,慢指针一次走一步。如果两个指针相遇,则表明链表中存在环。两个指针相遇的节点一定在环中。
(2)此时相遇,再让慢指针重新指向链表头节点开始,快指针位置不变,每次快慢指针同时移动一步,再相遇时,所指位置就是环的入口节点。
3.代码
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def EntryNodeOfLoop(self, pHead):
# write code here
if not pHead or not pHead.next:
return None
p_slow = pHead
p_fast = pHead
while True:
p_slow = p_slow.next
p_fast = p_fast.next.next
if p_slow ==p_fast:
p1 = p_fast
p2 = pHead
while p1 !=p2:
p1 = p1.next
p2 = p2.next
return p1