-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がnullです:

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

言い換えれば、その分野 に持ってthisいるIntList(私は推測する)です。nullhead

しかし、それが「有効な」状態であるかどうか、および (そうでない場合) どのようにしてその状態になったかは誰にもわかりません。これが有効な状態である場合、修正はaddToEnd、空のリストに適切に追加する場合に対処するために書き直すことです。つまりthis.head、ヌルです。(以下のコメントが示唆するほど単純ではありません...しかし、これは明らかに学習課題であるため、自分で解決できます。)


(FWIW、リンクされたリストをその場でソートすることは決して簡単でも効率的でもありません。それを行う簡単な方法は、リスト要素を配列にコピーし、配列をソートしてから、リストを再作成することです。)

于 2013-05-01T23:05:22.527 に答える