我有一个通用的链表,如果每个节点值相同并且顺序正确,我可以检查两个链表是否相等。我有一个函数将链接列表分为两部分,稍后我要检查两个列表在其节点中是否具有相同的值。
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
}
}
为了比较值,您必须要求T
是Equatable
:
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] 删除。
我来说两句