LeetCode 142 [Linked List Cycle II]

原题

给定一个链表,如果链表中存在环,则返回到链表中环的起始节点的值,如果没有环,返回null。

样例
给出 -21->10->4->5, tail connects to node index 1,返回10

解题思路

  • 首先跟Linked List Cycle一样,还是快慢指针,从头开始走,如果没有相遇快指针就走到尾了,则说明没有环,返回NULL
  • 如果相遇了,把慢指针重新放到开头,快慢指针一起一步一步走再次相遇即是环的入口,不要问我为什么...想知道的可以去看一下数学证明

完整代码

# 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
        """
        slow, fast = head, head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
            if slow == fast:
                slow = head
                while slow != fast:
                    slow = slow.next
                    fast = fast.next
                return slow
        return None
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容