我正在尝试从值为val的整数链接列表中删除所有元素。是否需要将删除的节点设置为nil以释放内存?
func removeElements(_ head: Node?, _ val: Int) -> Node? {
var first = head
var current = head
var prev: Node?
while current != nil {
if current?.val != val {
prev = current
} else if current?.val == first?.val {
var oldFirst = first
first = current?.next
oldFirst = nil // is this line necessary?
} else {
prev?.next = current?.next // do I need to set current to nil?
}
current = current?.next
}
return first
}
最佳答案
oldFirst = nil
只将当前作用域中的变量设置为零。
同样,current
是本地作用域中的一个变量,一旦离开其作用域,它就已经被取消引用并被清除。
如果您不再对某个对象有强引用,它将被自己释放,因为Swift使用自动引用计数(ARC:https://en.wikipedia.org/wiki/Automatic_Reference_Counting)
我不知道为什么你的代码中有第二个案例。我想它会检查当前节点值val
的情况,但是您将其与first.val
而不是val
进行比较
关于swift - Swift 3从单链列表中删除节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46164834/