考虑我正在尝试添加10、20&30.当我添加第一个节点10时,HEAD将为空。此时,HEAD和TAIL都将指向同一节点,即10。现在,当添加第二个节点20时,我们正在更新指向节点20的下一个TAIL。由于HEAD和TAIL共享相同的引用,HEAD也会更新。一切都很凉爽,直到这里。在此之后,我们将更新尾部引用。现在HEAD和TAIL不会共享共同的引用,对吧?但是,当我们添加第三个节点时,HEAD是如何更新的呢?我很困惑理解它…
public class LinkedList {
private class Node {
private int data;
private Node next;
public Node(int data) {
this.data = data;
}
}
private Node head;
private Node tail;
public void add(int data) {
var node = new Node(data);
if (head == null) {
head = tail = node;
return;
}
tail.next = node;
tail = node; // At this point, TAIL and HEAD are no longer connected, right? Still how HEAD gets updated when we are updating only TAIL?
}
}
tail = node;
//在这一点上,TAIL和HEAD不再连接,对吧?
尾部是您添加的最后一个元素,执行tail = node;
来更改旧的尾部是正常的,在这种情况下,头部将与新的尾部连接。
//当我们只更新TAIL时,HEAD是如何更新的?在头的第一次分配之后,在我们在链表中进行的所有添加过程中,它仍然是一样的
执行tail = node
时,tail
引用会更新到node
所指的位置。head
引用仍然与您第一次设置的引用相同。