indirect 间接 和 嵌套 enum
class Node{
let value: T?
let next: Node?
init(value: T?, next: Node?) {
self.value = value
self.next = next
}
}
let list = Node(value: 1, next: Node(value: 2, next: Node(value: 3, next: Node(value: 4, next: nil))))
// 单向链表 1 -> 2 -> 3 -> 4
// 上面的单向列表,用 nil 表示空节点, 不容易理解,也不好维护
// Swift2 中可以使用 嵌套 enum
// 这里会提示嵌套 enum 需要加上 indirect 间接
indirect enum LinkedList{
case empty
case node(Element, LinkedList)
// 链表节点的删除方法
func removing(_ element: Element) ->LinkedList{
guard case let .node(value, next) = self else {
return .empty
}
return value == element ? next : LinkedList.node(value, next.removing(element))
}
}
// 单项链表
let linkedList = LinkedList.node(1, .node(2, .node(3, .node(4, .empty))))
let result = linkedList.removing(2)