【发布时间】:2016-03-31 15:46:12
【问题描述】:
在下面的代码中,即使在删除节点 (20) 之后,如果我尝试通过将已删除节点作为头传递来变相打印所有节点,它也会打印所有节点以及已删除节点。有人可以解释这种行为以及 Java 中的垃圾收集吗?即使已删除的节点(20)没有下一个元素,它如何能够迭代所有节点?
节点:
class Node{
int nodeint;
Node next;
public Node(int nodeint){
this.nodeint = nodeint;
}
}
链表:
public class linkedlist{
Node head;
//Node next;
public linkedlist(Node obj){
this.head = obj;
}
public Node addnodes(int news){
Node newlink = new Node(news);
newlink.next = head;
head = newlink;
return head;
}
public void printAllNodes(Node obj){
Node current = obj;
while(current!=null){
System.out.println(current.nodeint);
current = current.next;
}
}
public Node remove(){
Node temp = head;
head = head.next;
return temp;
}
public void printHead(){
System.out.println("This is the present head node"+head.nodeint);
}
public static void main(String [] args){
Node obj1 = new Node(2);
Node obj2 = new Node(3);
Node obj3 = new Node(4);
obj1.next = obj2;
obj2.next = obj3;
obj3.next = null;
linkedlist newobj = new linkedlist(obj1);
Node obj = null;
obj = newobj.addnodes(5);
obj =newobj.addnodes(20);
//System.out.println(obj.nodeint);
newobj.printAllNodes(obj);
obj = newobj.remove();
System.out.println("A node is deleted");
newobj.printAllNodes(obj);
newobj.printHead();
}
}
这段代码的输出:
20
5
2
3
4
一个节点被删除
20
5
2
3
4
这是当前的头节点:5
【问题讨论】:
-
谢谢大家,所有的答案都帮助我理解了这个概念。我只是在尝试通过多种方式调整链接列表。
标签: java linked-list singly-linked-list