当我们删除java中的节点时,我们只需执行
n.data=n.next.data;
n.next=n.next.next;
(删除节点n.next)。
这是否完成了删除的目的,或者我们有一些方法来删除已删除的节点(如C中的free(n.next))?
答案 0 :(得分:3)
您无法在Java中删除对象本身。您只能通过删除对其实例的所有引用来标记符合垃圾回收条件的对象。垃圾收集将运行并释放内存的实际时间由JVM确定,无法显式控制。在您的示例中,如果您删除对某个节点的唯一引用,那么它才有资格获得GC。
答案 1 :(得分:0)
你可以简单地说:
n.next = n.next.next
在java中就足够了。
答案 2 :(得分:0)
在java中,不需要显式删除java对象。当没有对该对象的引用时,JVM会使用垃圾收集器自动删除java对象。因此,如果您不使用对象,则只需将其引用为空。
所以,你的代码
n.data=n.next.data;
n.next=n.next.next;
隐式删除(无法访问前一个n.next对象)不必要对象的引用。
答案 3 :(得分:0)
您需要确保没有任何引用挂在"已删除"节点。对Kon的回答可能有点澄清 - 你不能删除一个对象,当所有对它的引用都超出范围时,这个对象将(最终)被JVM垃圾收集。否则,如果您希望引用一些引用,则应通过以编程方式将其分配给null来帮助JVM,或者,如下面的代码中那样,将该引用重新分配给另一个对象。
n.next=n.next.next
所以你的代码很好,如果你知道代码第一行中的 n.next 是对要删除的节点的唯一引用,或者所有其他引用都是本地的变量方法,并且在方法返回时将超出范围。