1. 程式人生 > 實用技巧 >103. 帶環連結串列 II

103. 帶環連結串列 II

103.帶環連結串列 II

中文English

給定一個連結串列,如果連結串列中存在環,則返回到連結串列中環的起始節點,如果沒有環,返回null。

樣例

樣例 1:

輸入:null,no cycle
輸出:no cycle
解釋:
連結串列為空,所以沒有環存在。

樣例 2:

輸入:-21->10->4->5,tail connects to node index 1
輸出:10
解釋:
最後一個節點5指向下標為1的節點,也就是10,所以環的入口為10。

挑戰

不使用額外的空間

輸入測試資料(每行一個引數)如何理解測試資料?

hashmap解法

儲存訪問過的id地址,如果已經訪問過,說明該節點剛好是環的起點,返回,否則走到None,最終返回None

"""
Definition of ListNode
class ListNode(object):
    def __init__(self, val, next=None):
        self.val = val
        self.next = next
"""

class Solution:
    """
    @param head: The first node of linked list.
    @return: The node where the cycle begins. if there is no cycle, return null
    """
def detectCycle(self, head): # write your code here #帶環的話,說明id地址剛好重複,則返回,否則的話返回null if not head: return None hashmap = {} while head: if (id(head) not in hashmap): hashmap[id(head)] = True else:
return head head = head.next return None