leetcode 141 判斷鏈表中是否有環

題目描述

給定一個鏈表,判斷鏈表中是否有環。
進階:git

你可否不使用額外空間解決此題?

解題思路

  • 無環鏈表,最後一個節點爲nil,有環鏈表能夠無限循環next下去
  • 不用額外空間:快慢節點,慢節點一次走一步,快節點一次走兩步,當進入環中,每次循環,快節點會離慢節點近一步,快節點最終會追上慢節點
  • 用額外空間: 用map存走過的節點,第一個走過的節點就是環的入口

代碼實現

// ListNode Definition for singly-linked list.
type ListNode struct {
    Val  int
    Next *ListNode
}

func hasCycle(head *ListNode) bool {
    if head != nil {
        slow := head
        fast := head
        for fast != nil && fast.Next != nil {
            slow = slow.Next
            fast = fast.Next.Next
            if slow == fast {
                return true
            }
        }
    }
    return false
}

GitHub

  • 源碼傳送門
  • 項目中會提供各類數據結構及算法的Golang實現, LeetCode解題思路及答案
題目來源

leetcode 141. 環形鏈表github

相關文章
相關標籤/搜索