java - 排序列表递归插入方法

时间:2016-10-10 23:18:12

标签: java recursion

我实现了一个抽象类,并实现了一个插入到排序列表中的insert方法。这是我到目前为止的递归方法:

public void insert(E data) {
    Node<E> temp = head;
    insert(temp, data);
}

private void insert(Node<E> curr, E data){
    Node<E> temp = new Node<E>(data);
    if (head == null || data.compareTo(head.data) < 0) {
        temp.next = head;
        head = temp;
    }
    else if(curr.data.compareTo(data) < 0 && (curr.next == null || curr.next.data.compareTo(data) > 0)){
        temp.next = curr.next;
        curr.next = temp;
        return;
    }
    else{
      insert(curr.next, data);
    }
}

但是,无论何时我尝试在列表中插入2个以上的项目,都会出现空指针异常错误。有人可以解释我的错误吗?当我尝试运行它时只需插入1和2 https://gyazo.com/d254d563675b9d1b0efbce443eda4445

就会发生这种情况

1 个答案:

答案 0 :(得分:1)

它表示第53行有一个NullPointerException,它是else-if语句:

else if(curr.data.compareTo(data) < 0 && curr.next.data.compareTo(data) > 0)

我认为它会产生异常,因为curr.next为null。从我可以看到的方式来看,当你添加第一个元素时,你初始化head,但head.next为null(temp.next = head为null,因为当时head为null)。因此,当您尝试添加第二个元素时,您无法访问curr.next.data并且它会产生NullPointerException。