判断链表中是否有环(Swift实现)

判断链表中是否有环(Swift实现),第1张

题目
// 给你一个链表的头节点 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
    }
分析 核心方法:快慢指针;Swift没有 do while, 需要使用 repeat while 代替;不可使用 slow != fast,因为 ListNode 没有实现 Equalable 协议; 思考

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/996486.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-21
下一篇2022-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存