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 表示空節(jié)點, 不容易理解,也不好維護(hù)

// Swift2 中可以使用 嵌套 enum

?// 這里會提示嵌套 enum 需要加上? indirect 間接

indirect enum LinkedList{? ??

case empty? ??

case node(Element, LinkedList)? ? ? ?

?// 鏈表節(jié)點的刪除方法? ?

?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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容