将一个字符串值存储在一个空的链表中

Storing One String Value in an empty LinkedList

public class LinkedListExplained {


public Node head;
public Node tail;

public int size;

public LinkedListExplained() { // Constructor
    head = null;
    tail = null;
    size = 0;
}

public class Node{ // Inner Class
    String value;
    Node next;
}

public void add(String value){
    Node node = new Node();
    node.value = value;

    size++;
    if (head == null){
        head = node;
        tail = node;
        return;
    }
    tail.next = node;
    tail = node;

}

问题,将单个String值存储到空LinkedList时,是否存储了两次相同的值? 一次当头,一次当尾?

没有。 headtail 变量指向同一个 Node 对象。该对象包含 String 一次。

如果你正在学习Java,你首先需要了解的是在Java中,任何看起来像对象的东西实际上都不是对象;它是一个指向对象的指针。当然两个指针可能指向同一个对象。

因此,语句 public Node head; 没有声明 Node 的实例。它声明了一个指向 Node 实例的指针。这就是为什么您以后必须使用 new Node();

因此,由于您将 headtail 指针都设置为指向 Node 的同一个实例,因此看起来您有该节点的两个副本,但实际上你没有。您只有一个 Node 实例,并且有两个指针指向它。