次のスプリッタメソッドは、2つの独立したリンクリストのIntLinkedBag配列を返すように設計されています。これは、listSplitLessGreaterメソッドを呼び出すことでこれを実現し、整数のリンクリストの先頭参照とソートされた2つの新しいリンクリストの先頭参照を含むIntNode配列を返すスプリッタ整数値を渡します。 splitterメソッドは書かれたとおりに動作します。私はそれを働かせる唯一の方法でした。しかし、私はそれをコード化するためのより簡単な方法が必要であることを知っています。 * * // * ** * ** 間のすべてのプログラムを実行しているとき、私は私がnullポインタ免除エラーを受け取るないとき、私はこのリンクされたリストのヘッド参照をJavaのリンクリストオブジェクトに割り当てます。
newLists[0].head = answer[0];
newLists[1].head = answer[1];
と交換したいが。私の質問はなぜですか?このコードを書く正しい方法はなんですか?
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;
}
以下のようにコードを更新しました。私はエラーはありませんが、今は何も返されていません。テストコードでリンクリストが表示されていても、アイデアは?
このコードを追加すると動作しますが、なぜこの必要がありますか?
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
私はあなたが上記のようにしました。それ以上のアイデアは? – user1371651
@ user1371651:あなたの編集については、この特定の質問では答えられません(コード作成のためのより良い方法を探していただけです)。新しい頭部を作成したり、 'add(int)'を呼び出さなければならない理由は、あなたが 'IntLinkedBag'クラスを実装した方法だけに依存します。最初に 'add(int)'を呼び出さない限り、何も返されません。なぜなら、なぜ具体的にその実装を見ることなく(なぜならこの時点ではあまりにも多すぎるかもしれません)なぜ答えることができないのかです。 – Makoto
誠にありがとうございます! – user1371651