判断链表是否有环并找到入环节点:(快慢指针)
1、如果快指针走到空,无环
2、如果二者相遇,有环
3、相遇后,快指针返回链表开头,慢指针不动
4、两个指针同时走,每次均走一步,相遇点即为入环点
代码:
class Solution(object):
def detectCycle(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head==None or head.next == None or head.next.next == None:
return None
n1 = head.next
n2 = head.next.next
while n1 != n2:
if n2.next == None or n2.next.next == None:
return None
n1 = n1.next
n2 = n2.next.next
n2 = head
while n1 != n2:
n1 = n1.next
n2 = n2.next
return n1