创建一个包含头节点和尾节点的链表

make a linked list with head and tail nodes

我是数据结构的新手。当你制作一个包含头节点和尾节点的 linked 列表时,为什么我必须 link 新节点到尾节点? tail.next linked 到 newNode 还不够吗?

像这样:

public void add( Object data ) {
ListNode newNode = new ListNode( data );
    if ( isEmpty() ) {
        head = newNode;
    } else {
        tail.setNext( newNode );
    }
    tail = newNode;
    length = length + 1;
}

或者像这样:

if(head == null) {
    head = tail = newNode;
} else {
    tail.next = newNode;
    tail = newNode;
}

我查了下LinkedList的基础,还是不是很懂。我不确定这如何让 head link 变成 tail 以及如果将 tail 替换为 newNode,tail 如何保持先前的值。你能给我解释一下吗?非常感谢!

当列表只有一个节点时,headtail 指向同一个节点,所以更改任何指向的内容都会更改两者指向的内容(直到您更改 headtail)。所以在这种情况下,让 tail.next 指向新节点也会使 head.next 指向它。当列表较长时,对 tail 的更改不会影响 head(您不希望它们影响!)

头没有link尾。您应该将它们视为单独的项目。 head 指向列表的开头,tail 指向结尾。假设您只是为了简单起见而只添加而不删除。

头部和尾部开始时为空(指向 NULL)。添加第一个新节点(我们称它为 A)后,头和尾都设置为 A... 因为它是唯一的条目,根据定义它既是开始又是结束。

当您添加第二个节点 (B) 时,头部保持不变,当前 tail.next 设置为 B(也设置 head.next)。然后尾部设置为 B.

其中添加了第三个节点(C),head根本没有变化。但是 tail.next 设置为 C,尾部移动到 C。所以我们现在有 A.next = B,B.next =C 和 C.next 为 NULL。头指向A,尾指向C。

我们来看一个例子:

您的列表中有 A 个。您要添加 B。当您这样做时,A 指向 B 作为其后继节点,并且 B 变成最后一个节点(尾部)。

这正是您每次添加新节点时代码中发生的事情。前一个尾巴将其位置传递给新的尾巴,但必须保留对新尾巴的引用,以便列表可以保持互连。

希望对你有帮助,

此致,