Swift 环形链表- LeetCode

LeetCode

题目: 环形链表

给定一个链表,判断链表中是否有环。

进阶
你能否不使用额外空间解决此题?

方案:

可以转化为一个追击问题
前后双指针,slow走一步,fast走两步,如果有环存在,一定会相遇的。

代码:
/**
 * 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
 *     }
 * }
 */
extension ListNode: Equatable {
    public static func == (lhs: ListNode, rhs: ListNode) -> Bool {
        return Unmanaged.passUnretained(lhs).toOpaque() == Unmanaged.passUnretained(rhs).toOpaque()
    }
}

class Solution {
    func hasCycle(_ head: ListNode?) -> Bool {
        if (head == nil || head?.next == nil) {
            return false
        }
        var slow = head
        var fast = head?.next
        while(slow != fast) {
            if (fast ==  nil || fast?.next == nil) {
                return false
            }
            slow = slow?.next
            fast = fast?.next?.next
        }
        return true
    }
}
用Swift开始学习算法中,在LeetCode中开始做初级算法这一章节,将做的题目在此做个笔记,希望有更好方法同学们cue我哦。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容