【发布时间】:2017-06-18 03:39:58
【问题描述】:
我正在查看一些使用 Swift 实现 LinkedList 的代码,我需要有人为我澄清一些事情。首先,下面是我的 LinkedList 类的代码,以及从列表中删除节点的函数:
public class Node<T> {
var value:T
var next: Node?
}
public class LinkedList<T:Equatable> {
private var head = Node<T>()
func remove(at index: Int) {
if ((index < 0 || (index > (self.count - 1)) || (head.value == nil)) {
print("link does not exist.")
return
}
var current: Node? = head
var previous: Node<T>?
var listIndex:Int = 0
if index == 0 {
current = current?.next
head = current!
return
}
while current != nil {
if listIndex == index {
previous!.next = current?.next
current = nil
break
}
previous = current
current = current?.next
listIndex += 1
}
}
}
在从列表中删除对象时,在以下代码块中:
if index == 0 {
current = current?.next
head = current!
return
}
我与上述代码块相关的问题是,我意识到我将当前指针向下移动到列表中的一个节点,然后将头指针的引用更改为指向当前当前指向的节点,但是,最初指向 current.next 的节点会发生什么?没有对它的引用,但 IT 仍然有对列表中第二个节点的引用,对吗?如果该节点仍然具有对列表中下一个节点的引用,如何完全删除它?稍后,当在列表中间找到节点时,我对以下块有同样的问题:
if listIndex == index {
previous!.next = current?.next
current = nil
break
}
请注意:我不在学校,这不是家庭作业。我正在自学算法来复习我最初在 Java 中学到的概念,并将它们应用到 Swift 中。
【问题讨论】:
标签: swift linked-list