leetcode 109:将排序列表转换为二进制搜索树

时间:2018-12-19 09:25:34

标签: java

public class Solution {
public TreeNode sortedListToBST(ListNode head) {
    if (head == null)
        return null;
    if (head.next == null)
        return new TreeNode (head.val);
    ListNode slow = head;
    ListNode fast = head;
    ListNode pre = null;
    ListNode mid = null;
    while (fast.next != null && fast != null){
        pre = slow;
        fast = fast.next.next;
        slow = slow.next;
    }
    mid = slow;
    pre.next = null;
    TreeNode root = new TreeNode(slow.val);
    root.right = sortedListToBST(mid.next);
    root.left = sortedListToBST(head);

    return root;
}

}

这是我的解决方案,但显示: java.lang.NullPointerException

当我改变时 while (fast.next != null && fast != null){while (fast != null && fast.next != null){ 解决方案被接受

我不知道它们之间的区别。

1 个答案:

答案 0 :(得分:0)

&&运算符的工作方式是...如果有条件(cond1 && cond2),则编译器将检查cond1是否为true ..如果为false,则不会检查第二个条件..它将仅在第一个条件为true时才检查第二个条件。..如果fast为null .. fast.next将给出null指针...因此,在检查fast.next之前,应始终检查fast是否为null ...