整数の 1 つのリンク リストと、分割値と呼ばれる特別な値で始まるメソッドを作成する必要があります。リストの要素は順不同です。このメソッドは、ノードを 2 つのリンクされたリストに分割します。1 つは分割値より小さい要素を含むすべてのノードを含み、もう 1 つは他のすべてのノードを含みます。元の連結リストに整数の繰り返し (つまり、同じ要素を持つ 2 つ以上のノード) がある場合、この要素を持つ新しい連結リストには、この要素を繰り返す同じ数のノードが必要です。このメソッドは、作成されたリンク リストごとに 1 つずつ、2 つのヘッド参照を返します。
これを正しく行うために数えきれないほどの時間を費やしてきましたが、これが最も近いと思いますが、コンパイル中に copyTail* IntNodes が初期化されていない可能性があるというエラーが発生しました。私も自分のコードに完全に間違っているかもしれません....正しい方向に私を指し示す助けはありますか??
public static IntNode[ ] listSplitLessGreater(IntNode source, int splitter)
{
IntNode copyHeadLess;
IntNode copyTailLess;
IntNode copyHeadGreater;
IntNode copyTailGreater;
IntNode[ ] answer = new IntNode[2];
boolean less = true;
boolean greater = true;
// Handle the special case of the empty list.
if (source == null)
return answer; // The answer has two null references .
//Split list into two lists less and greater/equal than splitter.
while (source.link != null)
{
if (splitter < source.data)
{
if (less)
{
copyHeadLess = new IntNode(source.data, null);
copyTailLess = copyHeadLess;
less=false;
}
else
{
source = source.link;
copyTailLess.addNodeAfter(source.data);
copyTailLess = copyTailLess.link;
}
}
else
{
if (greater)
{
copyHeadGreater = new IntNode(source.data, null);
copyTailGreater = copyHeadGreater;
greater=false;
}
else
{
source = source.link;
copyTailGreater.addNodeAfter(source.data);
copyTailGreater = copyTailGreater.link;
}
}
}
//Return Head References
answer[0] = copyHeadLess;
answer[1] = copyHeadGreater;
return answer;
}