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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容