-2

嘿,我正在尝试为我制作的动态链接列表类制作一个快速排序方法。但我不断收到 NullPointerException 并且无法找出原因。

 private void addToEnd(IntList y){
if(y.head != null ){
        IntNode tmp = this.head;
    while(tmp.getNext() != null){     //line 68
    tmp = tmp.getNext();

}
tmp.setNext(y.head);
}
  }


 public IntList Quicksort(){
if(this.length() > 1){
    IntList bList = new IntList();
    IntList sList = new IntList();
    IntList pivot = new IntList();

    pivot.addNode(head);
    int pivotInt = this.head.getValue();
    IntNode test = this.head.getNext();

    while(test != null){

        if(test.getValue() > pivotInt){

            bList.addNode(test);

        }else{ sList.addNode(test);}

    test = test.getNext();
}

    sList.Quicksort().addToEnd(pivot);
    sList.addToEnd(bList.Quicksort());


}
return this;
}

我在第 68 行收到 NullPointerException,但不知道为什么。有谁可以帮我离开这里吗?第 68 行是

while(tmp.getNext() != null){     //line 68
4

1 回答 1

1

我在第 68 行收到 NullPointerException,但不知道为什么。

“为什么”tmp是空的:

IntNode tmp = this.head;
while(tmp.getNext() != null){     //line 68

换句话说this,是一个IntList(我猜)null在它的head领域里。

但是,这是否是一个“有效”状态,以及(如果不是)它是如何进入该状态的,都是任何人的猜测。如果这是一个有效的状态,那么修复是重写addToEnd以处理正确添加到空列表的情况;即为this.head空。(它并不像下面的评论那么简单......但这显然是一个学习练习,所以你可以自己解决。)


(FWIW,对链表进行适当的排序从来都不是一件容易或有效的事情。简单的方法是将列表元素复制到一个数组中,对数组进行排序,然后重新填充列表。)

于 2013-05-01T23:05:22.527 回答