我正在学习链表的工作原理,但是我不了解一些简单的知识,例如Node.next的工作原理,我认为问题是我不了解java中的引用是如何工作的。
public class Node {
int date;
Node next; //This line i don't understand, what are we doing when we declare class type inside the same class
}
但是还有:
public class SinglyLinkedList {
private Node first; //What is the difference between this line and the line in the class Node?
答案 0 :(得分:1)
Node next;
您可以称之为转发参考。它告诉您该类Node
的实例具有引用,该引用可以指向另一个节点实例。
当然,最初该引用将为null(不指向另一个Node
)。但是,当您开始构建节点列表时,该工作原理是通过将该字段值从null更改为指向该类的某个实例,从而链接到next
节点。这就是简单的链接列表的工作方式:您从一个根节点开始,然后向列表中添加注释意味着:更新此类next
字段。
从这个角度来看,上述两个类之间没有“真正的”区别。你也可以去:
Node firstNode = new Node(5);
Node secondNode = new Node(42);
firstNode.next = secondNode;
具有一个带有first
字段的不同类的要点是出于概念上的原因:第二类“告诉”读者:“我的目的是包含列表的第一个Node对象”。
您可以打开here,以获取有关类,对象和引用的更多详细说明。
请注意:这里最关键的一点是,默认情况下,当您进行new Node()
调用时,该字段next
以null
开头。
答案 1 :(得分:0)
您创建了一个对象(在本例中为Node),这对您确定下一个对象(或上一个对象,父对象或子对象等)非常重要,该对象需要一个具有相同对象类型的变量。