Java 中的链表实现看起来不像 C++ 中的链表

Linkedlist implementation in Java doesnot seem like linkedlist as in C++

我正在浏览 LinkedList 并在 Java 中看到了实现。在我尝试和实现链表的那些日子里,它有指针和地址以及大量的艰苦工作。使用 Java 实现起来更容易,但我仍然需要做一些工作。我对链表的了解从下图中很清楚,其中 1,2,3,4 是链表的节点。

然而在java中,我遇到的代码让我想到了下图的LinkedList。

Java中链表的实现代码如下,

class LinkedListNode
{
    LinkedListNode nextNode = null;//consider this member variable
    int data;
    public LinkedListNode(int data)
    {
        this.data = data;
    }
    void appendItemToLinkedList(int newData)
    {
        LinkedListNode end = new LinkedListNode(newData);
        LinkedListNode temp = this;
        while (temp.nextNode != null) { temp = temp.nextNode; }
        temp.nextNode = end;

    }
}

public static void main(String[] args) 
    {
        LinkedListNode list = new LinkedListNode(10);
        list.appendItemToLinkedList(20);
        list.appendItemToLinkedList(30);
        list.appendItemToLinkedList(40);
        list.appendItemToLinkedList(50);
        list.appendItemToLinkedList(60);
    }

在图中,您可以清楚地看到节点对象位于其他节点对象的内部。它真的是一个链接的 list.Or 父容器,其中包含其他容器等等吗?

第二张图是认为一个列表 包含 另一个列表(如果 LinkedList 类型是原始类型,它就会这样)。

第一个图表是当你想到一个 LinkedList 引用 另一个时得出的。

因为 LinkedList 是引用类型,而不是原始类型,所以 nextNode 字段不会就地存储完整的 LinkedList,而只是对一个的引用。因此,您的第一个图表是正确的,即使在 Java.

中也是如此

另请参阅:

链表在Java和C++中的实现实际上非常相似。唯一的区别是语言不同造成的自然差异。在两者中,您都将拥有一个用于 LinkedListNode 的实体 (class)。在这两个 class 中都有一个字段 next ,它在 Java 中是一个引用,或者在 C++ 中是一个指向下一个节点的指针。插入方法看起来也一样。所以总的来说,它只是相似:)

而适合这个设计的图当然是第一个了

Java 中的 LinkedList 是作为双 LikedList 实现的,因此它不是 C++ 中的原始类型。 仅供参考 - 来自 Stock(Doctor Deprecator)在 2016 年 JavaOne 的演讲中,java 计划出于特殊原因放弃对 LinkedLists、Vectors 和其他一些数据结构的支持。因此可能存在混淆和技术差异。

Linked list in C++ above

主要区别在于 JAVA,头部不仅仅是指向第一个元素的指针(无数据)。甚至 head 都有数据和指向第二个元素的指针(仅在列表为空的情况下除外)。简而言之,java 链表中的每个元素都有 2 个指针和数据,除了 head 有一个指向下一个元素及其数据的指针。不过我不确定最后一个元素。