我正在研究第 876 号的 leetcode 问题,它说:
给定一个非空的、带有头节点头的单向链表,返回链表的中间节点。 如果有两个中间节点,则返回第二个中间节点。
这是我到目前为止写的,但它在 while 循环中抛出一个空指针异常。我认为由于 while 循环每次在执行任何操作之前都会检查 node.next.next 是否为空,因此它不会引发异常。我做错了什么?
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode middleNode(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while(fast.next.next != null) { //null pointer exception on this line
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
}
只需将条件更新为以下内容:
while(fast != null && fast.next != null)
将条件修改为 它将涵盖循环中slow.next
和fast
引用的空检查。
while(null!=fast.next && fast.next.next != null) {