Java链接列表类定义的说明

时间:2015-11-14 13:26:07

标签: java data-structures

我获得了以下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}
}

1 个答案:

答案 0 :(得分:2)

// I suppose this is the value of the node.
public final T v; 

是。 Nodeparameterized 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