gpt4 book ai didi

swift - 如何比较 swift 中的两个通用链表?

转载 作者:行者123 更新时间:2023-11-28 06:13:59 24 4
gpt4 key购买 nike

我有一个通用链表,如果每个节点值都相同且按顺序排列,我可以检查两个链表是否相等。我有一个将链表分成两部分的函数,稍后我想检查两个列表在其节点中是否具有相同的值。

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
}
}

最佳答案

为了比较值,您必须要求 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
}
}
}

关于swift - 如何比较 swift 中的两个通用链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45663847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com