Hay我正在尝试为我制作的动态链接列表类创建一个quicksort方法。但我一直得到一个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
答案 0 :(得分:1)
我在第68行得到NullPointerException并且不知道为什么。
“为什么”是tmp
为空:
IntNode tmp = this.head;
while(tmp.getNext() != null){ //line 68
换句话说,this
是IntList
(我猜),null
字段中有head
。
但是,这是否是一个“有效”的状态,并且(如果不是)它是如何进入该状态的是任何人的猜测。如果这是一个有效状态,则修复是重写addToEnd
以处理正确添加到空列表的情况;即this.head
为空。 (这不像下面的评论那么简单......但这显然是一个学习练习,所以你可以自己解决。)
(FWIW,对链接列表进行排序永远不会简单或有效。简单的方法是将列表元素复制到数组中,对数组进行排序,然后重新填充列表。)