所以我正在练习一些链接列表问题,而且我一直在混淆说我们这样做 //这是一个只有头部的单链表
// what is the difference between
ListNode temp = head;
while( temp != null ) {
temp = temp.next ;
}
while( temp.next != null ) {
temp = temp.next ;
}
这两者有什么区别?如果你能向我解释一下,我们将不胜感激。
答案 0 :(得分:2)
第一个示例在temp == null
时终止,这意味着temp
在循环之后将具有null值并且对您没有多大用处,但是为了处理列表中的项目,这是完美的有效的方法。
第二个例子将在temp.next == null
时停止,但是temp本身实际上有一个值,在这种情况下它将是对列表尾部的引用,如果你想要添加其他东西,它会更有用列表也是如此。
正如其他一些人指出的那样,如果temp为null,第二个将导致null解除引用异常,但如果temp在处理循环之前为null,那么这只会是一个问题,因此可以使用条件避免这种情况。
答案 1 :(得分:1)
第一个会比第二个链接晚一个链接,所以如果你想处理每个节点然后使用第一个。
答案 2 :(得分:0)
如果第一次检查while条件时temp本身为null,则第二个可能会获得NullPointerException。第一个是安全的。
第二个会在链表中的最后一个元素中结束,而第一个元素最终会以null结尾。
答案 3 :(得分:0)
第二个循环在执行条件时会生成nullPointerException,因此它不是一种有效的方法。