次のスプリッターメソッドは、2つの別々のリンクリストのIntLinkedBag配列を返すように設計されています。これは、listSplitLessGreaterメソッドを呼び出すことによって実現され、整数のリンクリストのヘッド参照と、並べ替えられた2つの新しいリンクされた整数リストのヘッド参照を含むIntNode配列を返すスプリッター整数値を渡します。スプリッターメソッドは記述どおりに機能します。それは私がそれを機能させることができる唯一の方法でした。しかし、私はそれをコーディングするためのより簡単でより良い方法がなければならないことを知っています。// * ** * ****の間のすべてをこれに置き換えたい
newLists[0].head = answer[0];
newLists[1].head = answer[1];
しかし、そうすると、プログラムの実行時にnullポインター免除エラーが発生します。私の質問はなぜですか?そして、このコードを書く正しい方法はどうですか?
public IntLinkedBag[] splitter(int target)
{
IntLinkedBag[] newLists = new IntLinkedBag[2];
IntNode[] answer = new IntNode[2];
answer = IntNode.listSplitLessGreater(head, target);
//**********************************
IntLinkedBag b = new IntLinkedBag();
IntLinkedBag c = new IntLinkedBag();
b.add(5);
b.head = answer[0];
newLists[0] = b;
c.add(5);
c.head = answer[1];
newLists[1] = c;
//**********************************
return newLists;
}
以下のようにコードを更新しました。エラーは発生しませんが、何も返されません。テストコードはリンクリストを出力しますが....そしてアイデアは?
public IntLinkedBag[] splitter(int target)
{
IntLinkedBag[] newLists = {new IntLinkedBag(), new IntLinkedBag()};
IntNode[] answer = new IntNode[2];
answer = IntNode.listSplitLessGreater(head, target);
newLists[0].head = answer[0];
newLists[1].head = answer[1];
System.out.println(IntNode.showList(newLists[0].head)); //test code
System.out.println(IntNode.showList(newLists[1].head)); //test code
return newLists;
}
このコードを追加すると機能しますが、なぜこれが必要なのですか?
newLists[0].add(5); //adding a number to linked list to create a temporary head.
newLists[1].add(5); //don't know why I have to have this but its only way code works correctly