【问题标题】:Need clarification about Linked Lists using Swift需要澄清使用 Swift 的链表
【发布时间】: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


    【解决方案1】:

    您更正了index == 0 块执行后,将不再引用原始head。这意味着对于程序的其余部分,您无法对该节点执行任何操作。最好回收为节点分配的内存,以便将其用于其他对象(否则您将拥有一个完全无用的节点,正在浪费内存)。

    Swift 使用automatic reference counting,因此它会检测到何时没有对对象的引用并回收内存。无需你做任何特别的事情,内存就会被回收。

    如果该节点仍然具有对列表中下一个节点的引用,如何将其完全删除?

    原始头具有对另一个节点的引用这一事实并不能阻止它被系统回收。程序无法查询哪些对象引用了该其他节点,因此如果原始头被回收(除了可用的额外内存),它对程序的其余部分没有影响。

    【讨论】:

    • 非常感谢您的澄清。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2011-11-09
    • 2012-07-18
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2015-07-26
    相关资源
    最近更新 更多