我获得了以下Java类定义来实现单个链表程序,但我无法得到完整的想法。我在代码中写了一些评论,指出了我的问题。
// ******************************************************************
// Definition of class Node<T>.
// ******************************************************************
public final class Node<T>
{
// This is a class with "generics" where T represents a type.
// A final class cannot be extended.
// A final variable behaves like a constant and can only be initialized at the time it is
// declared or within a constructor.
// I suppose this is the value of the node.
public final T v;
// I do not understand this. How is "next" defined "recursively"?
// Please help me visualize this situation.
// Can this variable indicate the end of the list, maybe with a null value?
public Node<T> next;
// Constructor.
public Node (T val, Node<T> link) {v = val; next = link}
}
答案 0 :(得分:2)
// I suppose this is the value of the node.
public final T v;
是。 Node
是parameterized class,其中包含的实际数据类型称为T
。因此,节点的值是具有此类型T
的变量。我们可以拥有Node<Integer>
,其中包含Integer
值,但也可以包含Node<String>
,其中包含String值。 Node
的行为方式相同。
// I do not understand this. How is "next" defined "recursively"?
// Please help me visualize this situation.
// Can this variable indicate the end of the list, maybe with a null value?
public Node<T> next;
在链表中,一个节点指向列表中的下一个节点。这就是为什么它被称为&#34;链接&#34; list:所有链接在一起的元素链。我们可能会说它是递归定义的,因为一个节点指向下一个节点,而下一个节点又指向下一个下一个节点,等等。
当到达终点时,没有下一个节点,因此它是null
:最后一个元素是具有next = null
的元素。请注意,可能没有最后一个元素:一个节点可以指向第一个元素,它将创建一个循环列表。
举个例子,我们假设您要构建一个包含2个整数元素的链表。第一个元素是1,然后是3.您可以编写以下内容:
Node<Integer> firstElement = new Node<>(1, new Node<>(3, null));
// here firstElement.v will be 1 and firstElement.next.v will be 3