我的教科书中有以下代码。并且代码打算删除节点。
Node<String> nodeRef = head.next;
nodeRef.next = nodeRef.next.next;
Node<String> nodeRef = head.next;
实际上做了什么?
nodeRef
是否复制head.next
节点项?
如果是,那是head.next
指向nodeRef
和原始head.next
吗?
或Node<String> nodeRef = head.next;
只是给head.next命名而不是创建一个新节点?
仍然对节点如何工作感到困惑。有人可以解释一下吗?
答案 0 :(得分:1)
“节点”并不重要;这些只是对象的引用。将Node
替换为任何其他引用类型,问题完全相同。
Node nodeRef = head.next;
这会将nodeRef
设置为对head.next
中的任何内容的引用。它不会复制任何内容。
head.next
根本不会改变。
要解决您的一条评论:
nodeRef.next = nodeRef.next.next
会照其说的做;现在将引用nodeRef.next
而不是引用原始nodeRef.next.next
。
原始nodeRef.next
引用的对象将不再迭代,因为没有节点指向它。它可能有资格获得GC,也可能没有资格获得GC,具体取决于是否有任何其他人参考GC。
(其他节点可以实际引用它,就像允许使用循环列表一样。)