0
点赞
收藏
分享

微信扫一扫

判断链表中是否有环

sin信仰 2022-04-07 阅读 76

题目

// 给你一个链表的头节点 head ,判断链表中是否有环。
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public var val: Int
 *     public var next: ListNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.next = nil
 *     }
 * }
 */

解答

func hasCycle(_ head: ListNode?) -> Bool {
        var slow = head, fast = head
        repeat {
            slow = slow?.next
            fast = fast?.next?.next
        } while slow !== fast && fast != nil
        return fast == nil ? false : true
    }

分析

  1. 核心方法:快慢指针;
  2. Swift没有 do while, 需要使用 repeat while 代替;
  3. 不可使用 slow != fast,因为 ListNode 没有实现 Equalable 协议;

思考

如果链表有环,为什么一定会出现 slow === fast ? fast 不可以跨越 slow 么?

举报

相关推荐

0 条评论