一.题目:
判断链表是否存在环路,若有则返回环路路口节点,否则返回-1.
二.解题思路:
快慢指针法:通过判断快指针和慢指针是否相遇来验证是否存在环路;
当快慢指针相遇时,将慢指针指向链表头部,同时两指针移动速度都为1,再次相遇的地方就是环路路口.
代码如下:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def detectCycle(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head == None or head.next == None:
return None
slow = fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
if fast == slow:
break
if slow == fast:
slow = head
while slow != fast:
slow = slow.next
fast = fast.next
return slow
return None