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

时间:2017-12-15 02:44:23

标签: java linked-list

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

浏览链表:

Node tmp = head;
while(tmp != null) {
     tmp = tmp.next;
}

我对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);
   }
}

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

2 个答案:

答案 0 :(得分:4)

在使用

的第一个循环中
  

temp!= null

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

temp.next != null确保它会在temp.next is actually null的最后一个节点停止。 在使用1st时,你将无法在最后一个节点停止,但在使用第二个时,你必须在一个新节点附近停止,否则你将通过它。

Q值。他们是一回事吗?

不,他们不是。

问题的最后一段是正确的

  

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

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

答案 1 :(得分:2)

在循环结束后,考虑一下tmp将成为。使用tmp != nulltmp只能 null,这是无用的;你不能对null做任何事情。

循环之后,您希望tmp成为 last 节点,因此您可以向其添加新节点。除了最后一个节点之外的所有节点都有下一个节点,因此检查tmp.next != null意味着当循环退出时,tmp.next将为null,这对于最后一个节点仅为真。

如果变量名为last(而不是tmp),则代码会更清晰。