如何比较两个通用链表?

我的甜蜜

我有一个通用的链表,如果每个节点值相同并且顺序正确,我可以检查两个链表是否相等。我有一个函数将链接列表分为两部分,稍后我要检查两个列表在其节点中是否具有相同的值。

func divideList(atIndex index:Int) -> (first: LLGeneric<T>?,second: LLGeneric<T>?)

我在用例中寻找它,可以在分割并比较之后(在反转一个列表之后)检查链接列表中的回文。

注意:我的链表节点是通用的,例如

   class LLGenericNode<T> {
    var value: T
    var next: LLGenericNode?
    weak var previous: LLGenericNode?
    init(_ value: T) {
        self.value = value
    }
}
马丁·R

为了比较值,您必须要求TEquatable

class LLGenericNode<T: Equatable> {
    // ...
}

然后,您可以==通过首先比较这些值来实现如果值相等,则对列表尾部进行递归比较。

extension LLGenericNode: Equatable {
    static func ==(lhs: LLGenericNode<T>, rhs: LLGenericNode<T>) -> Bool {
        if lhs.value != rhs.value {
            return false
        }
        switch (lhs.next, rhs.next) {
        case (nil, nil):
            // Both tails are == nil:
            return true
        case let (lvalue?, rvalue?):
            // Both tails are != nil:
            return lvalue == rvalue // Recursive call
        default:
            // One tails is nil and the other isn't:
            return false
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章