2016-10-10 62 views
0

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

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

它说,有一个NullPointerException在53行,这是其他-if语句:

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

我认为这因为curr.next为空而给出该例外。从我可以看到的方式,当你添加第一个元素你初始化头,但head.next为空(temp.next = head为空,因为当时头为空)。因此,当您尝试添加第二个元素时,您无法访问curr.next.data并且它会给出NullPointerException。

+0

我该如何处理? – witcheR

+0

一个简单的方法是启动else if(curr.data!= null && curr.next!= null)。 if条件一旦为空并且一直到最后的else都将是假的。但这不是根本问题。根本问题是你试图管理一些可以通过其他方式更好地处理的事情的方法,例如追加到列表然后使其具有唯一性。 –

+0

'else if(curr.data.compareTo(data)<0 &&(curr.next == null || curr.next.data.compareTo(data)> 0)'可能可以解决问题,就像else中一样if块要添加数据iff curr> data> curr.next和curr.next = null意味着数据是最小的元素 – merterpam