我正在尝试从值为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/

10-16 10:44