swift - Swift:删除 LinkedList 中的通用项目
问题描述
我正在尝试从链接列表中删除通用项目。我遇到的问题是,当我检查时head?.value == value
,它需要“T”才能符合 Equatable。
我无法完成这项工作。当我尝试NNode<T>
通过将 Equatable 添加到我的泛型类来制作 Equatable 时NNode<T: Equatable>
,我的 typealiasNode
出现不符合协议 Equatable 的错误。我该怎么办?
class NNode<T: Equatable> {
var value: T
var next: NNode?
init(value: T, next: NNode?) {
self.value = value
self.next = next
}
}
class LinkedList<T> {
public typealias Node = NNode<T>
func delete(value: T) {
if head?.value == value {
head = head?.next
}
var prev: Node?
var current = head
while current != nil && current?.value != value {
prev = current
current = current?.next
}
prev?.next = current?.next
}
}
解决方案
您还需要T
遵守Equatable
:LinkedList
class NNode<T: Equatable> { ... }
class LinkedList<T: Equatable> {
public typealias Node = NNode<T>
...
}
推荐阅读
- javascript - 从完整日历中时间线视图中的事件单击获取事件开始和停止时间
- angular - 使用 webpack 运行时在 vendor.js 中未定义事件
- java - 如何从 CSV 读取行以在多个线程中使用
- python - 如何使用 Python 在 JSON 文件中将日期四舍五入到最接近的小时?
- java - Gson 是否忽略 JsonElement 字段上的 @JsonAdapter?
- ruby-on-rails - 始终使用关联的模型子类
- python - 每当我在我的 mac 终端中执行 pip3 freeze 或任何 pip3 命令时,它都会引发语法错误
- printing - 打印旋转传单地图和 jsPDF
- java - 通过 java 运行时使用腌制的 python 类
- python - 如何打印具有动态值的表格?