我有一个单链表
a->b->c->d->e
a,b,c,d 和 e 是节点类型的对象。我想在遍历列表时删除一个节点,然后将删除的节点作为列表的头部,如下面的代码所示
list.delete(iterator, current);
list.addObjectAtFront(current);
public void delete(ListIterator li, Node node) {
if (li == null) {
throw new NullPointerException();
}
li.next();
if (li.previous() != null) {
li.previous().setNext(node.getNext());
}
}
public void addObjectAtFront(Object o) {
Node newNode = new Node(null, o);
if (this.head != null) {
newNode.setNext(this.head);
this.head = newNode;
} else {
this.head = this.tail = newNode;
}
}
调用上述方法时,假设当前项目为 c。我期待以下
list.delete(iterator, current);
Output: a->b->d->e
list.addObjectAtFront(current);
Output: c->a->b->d->e
我有两个相互矛盾的想法
删除后,c 不再指向任何其他节点,可以在调用第二种方法之前进行垃圾收集。
c 不能被垃圾收集,因为它本身不是 null 并且里面有一些数据。这意味着如果我不需要使用 c; 它只会在记忆中徘徊。
哪一个是正确的,还是我完全弄错了,需要对对象引用有新的理解?