lintcode練習-103. 帶環連結串列 II
阿新 • • 發佈:2019-01-24
103. 帶環連結串列 II
給定一個連結串列,如果連結串列中存在環,則返回到連結串列中環的起始節點,如果沒有環,返回null。
樣例
給出 -21->10->4->5, tail connects to node index 1,返回10
挑戰
不使用額外的空間
解題思路:
1、定義一個快慢指標,
2、如果連結串列無環,那麼fast一定會遇到終點,返回none。
3、如果連結串列有環,則兩個連結串列一定會相遇,當兩個相遇以後,fast重新回到head的位置,slow不動。然後fast指標和slow指標每次都移動一步,繼續遍歷
4、當兩個指標再次相遇時,就是第一個入環的結點。
""" 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 if head is None or head.next is None or head.next.next is None: return None slow, fast = head.next, head.next.next while slow!= fast: if fast.next is None or fast.next.next is None: return None slow = slow.next fast = fast.next.next fast = head while slow != fast: slow = slow.next fast = fast.next return slow