Swift - LeetCode程序员Swift in LeetCode

Swift - LeetCode - 环形链表 1

2019-03-07  本文已影响5人  依赖糊涂

题目

环形链表 1

问题:

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

说明:

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

解题思路:

双指针法:

在找链表中点时用过的快慢指针,如果有环的话,快指针总会和慢指针相遇

哈希表法:

使用一个指针遍历链表,每次访问一个节点首先都判断Hashset中是否存在同一个节点,如果存在则链表存在环,否则持续加入到Hashset中。当指针遍历到NULL的时候仍然没有找到环,证明链表不存在环。 但不满足条件。

代码:
/**
public class SingNode {
    public var value : Int
    public var nextNode: SingNode?
    
    public init(value:Int) {
        self.value = value
    }
}

extension SingNode : CustomStringConvertible {
    public var description: String {
        var string = "\(value)"
        var node = self.nextNode
        
        while node != nil {
            string = string + " -- " + "\(node!.value)"
            node = node?.nextNode
        }
        return string
    }
}
 **/
      
       func hasCycleI(_ l1:SingNode?) -> Bool {
        if l1 == nil || l1?.nextNode == nil {
            return false
        }
        var fast = l1
        var slow = l1
        
        while fast?.nextNode != nil && fast?.nextNode?.nextNode != nil {
            fast = fast?.nextNode?.nextNode
            slow = slow?.nextNode
            if fast == slow {
                return true
            }
        }
        return false
    }

上一篇下一篇

猜你喜欢

热点阅读