节点是 node != null 和 node.next == null 之间的区别?

suk*_*iyo 2 java linked-list

我在这里阅读链接列表,我有点困惑。我已经把它画出来了,但看起来它们仍然是一样的。

遍历链表:

Node tmp = head;
while(tmp != null) {
     tmp = tmp.next;
}
Run Code Online (Sandbox Code Playgroud)

我对 while 循环的思考过程:tmp 从头开始​​。现在,当 tmp 指向下一个节点时,tmp 继续指向它旁边的节点。它一直持续到 tmp 没有指向它旁边的另一个节点。

添加到链表的末尾:

public void addLast(AnyType item)
{
   if(head == null) addFirst(item);
   else
   {
      Node<AnyType> tmp = head;
      while(tmp.next != null) 
            tmp = tmp.next;

      tmp.next = new Node<AnyType>(item, null);
   }
}
Run Code Online (Sandbox Code Playgroud)

我对 while 循环的思考过程:tmp 从头开始​​。现在,当 tmp 指向下一个节点时,tmp 继续指向它旁边的节点。它一直持续到 tmp 没有指向它旁边的另一个节点。然后它跳出循环并分配 tmp 指向新节点旁边。

Bri*_*ore 6

在第一个循环中使用

温度 != 空

您将遍历链表并完全交叉它。当您只需要打印链表的所有元素时,它会很有用。但是如果在最后添加一个节点,您必须在最后一个节点处停止,以便您可以将新节点附加到 last.next 节点。

temp.next != null确保它将停在最后一个节点 where temp.next is actually null。使用 1st 时,您将无法在最后一个节点处停止,但使用 2nd 时,您将停在必须附加新节点的地方,即最后,否则您将跳过它。

问:它们是同一回事吗?

不,他们不是。

问题的最后一段是正确的

我对 while 循环的思考过程:tmp 从头开始​​。现在,当 tmp 指向下一个节点时,tmp 继续指向它旁边的节点。它一直持续到 tmp 没有指向它旁边的另一个节点。然后它跳出循环并分配 tmp 指向新节点旁边。

现在添加到它,第一种情况是您的temp本身将变为null