Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LinkedList temp.next和temp?_Java_Linked List - Fatal编程技术网

Java LinkedList temp.next和temp?

Java LinkedList temp.next和temp?,java,linked-list,Java,Linked List,所以我在练习一些链表问题,我一直被搞混,比如说我们做什么 //这是一个只有标题的单链表 // what is the difference between ListNode temp = head; while( temp != null ) { temp = temp.next ; } while( temp.next != null ) { temp = temp.next ; } 再说一次,两者之间有什么区别?如果您能向我解释这一点,我们将不胜感激 第一个链

所以我在练习一些链表问题,我一直被搞混,比如说我们做什么 //这是一个只有标题的单链表

// what is the difference between 

ListNode temp = head;
while( temp != null ) {
    temp = temp.next ; 
} 

while( temp.next != null ) {
    temp = temp.next ; 
} 

再说一次,两者之间有什么区别?如果您能向我解释这一点,我们将不胜感激

第一个链接将比第二个链接晚停止一个链接,因此如果要处理每个节点,请使用第一个链接。

第一个示例在
temp==null
时终止,这意味着
temp
将在循环后具有null值,对您没有多大用处,尽管对于处理列表中的项目,这是一种非常有效的方法

第二个示例将在
temp.next==null
时停止,但temp本身实际上有一个值,在这种情况下,它将是对列表尾部的引用,如果您还想在列表中添加其他内容,这将非常有用


正如其他一些人所指出的,如果temp为null,则第二个将导致null解引用异常,但只有在处理循环之前temp为null时,这才是一个问题,因此,这可以通过一个条件来避免。

如果在第一次检查while条件时temp本身为null,则第二个条件可能会导致NullPointerException。第一种是安全的,不会出现这种例外情况


第二个循环将在链表的最后一个元素中结束,而第一个循环将在null中结束。

第二个循环将在执行条件时生成nullPointerException,因此这不是一种有效的方法。

因此,如果我试图执行removeLast,我应该在(temp.next!=null){temp=temp.next}temp.next=null;//我想的对吗?要删除最后一个,您需要在(temp.next!=null){temp=temp.next}temp=null;当您位于最后一个节点(第一个节点的next为null)时,循环将退出,因此temp将在循环结束时保留最后一个节点。为了澄清我之前所说的,第一种方法将允许您触摸每个节点,并在循环内进行处理,但在temp中以null退出,第二种方法将触摸每个节点,除了循环内的最后一个节点,但在temp中以最后一个节点退出。希望这有帮助。