141.环形链表

一、哈希表

public class ListNode {
    public var val: Int
    public var next: ListNode?
    public init(_ val: Int) {
        self.val = val
        self.next = nil
    }
}

class Solution {
    func hasCycle(_ head: ListNode?) -> Bool {
        //方法1. 一次遍历,使用HashMap的方法存储这个点之前出现过没有
        //时间复杂度O(N),控件复杂度O(1)
        //边界条件
        guard var head = head else {
            return false
        }
        var haveSeen = Set<ListNode>()
        while head.next != nil {
            if !haveSeen.add(head) {
                return true
            }
            head = head.next!
        }
        return false
    }
}

二、快慢指针

class Solution {
    func hasCycle(_ head: ListNode?) -> Bool {
        var slowNode = head
        var fastNode = head?.next
        while fastNode?.next != nil {
            if slowNode === fastNode {
                return true
            }
            slowNode = slowNode?.next
            fastNode = fastNode?.next?.next
        }
        
        return false
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(...
    大龄码农的技术点滴阅读 183评论 0 0
  • 给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索...
    genggejianyi阅读 257评论 0 0
  • 给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索...
    衣锦昼行阅读 245评论 0 0
  • 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(...
    Jay丶x阅读 136评论 0 0
  • https://leetcode-cn.com/problems/linked-list-cycle/[https...
    yaoqi7777阅读 139评论 0 0