xより小さいすべてのノードがx以上のすべてのノードの前に来るように、値の周りにリンクリストを分割するコードを記述しようとしています。 xがリスト内に含まれている場合、xの値はxより小さい要素の後にある必要があります。ただし、パーティション要素xは、「正しいパーティション」のどこにでも置くことができます。整数値を中心としたリンクリストの分割
入力3→5→8→5→10→2→1 [パーティション= 5] 出力3→1→2→10→5→5→8
Nodeクラスは以下のように定義されています。
class Node{
Node next = null;
int data;
public Node(int d){
data =d;
}
public Node() {
// TODO Auto-generated constructor stub
}
void appendToTail(int d){
Node end = new Node(d);
Node n = this;
while(n.next!=null){
n = n.next;
}
n.next = end;
}
以下は、私が思い付いた半分の作業コードです。ヘッドノードは、以上分割数に等しい整数である場合
static void Partition(Node n,int numb){
Node tail = n;
while(tail.next != null){
tail = tail.next;
}
Node current = n;
Node tailCurrent = tail;
Node prev = null;
while(current!= tailCurrent){
if(current.data<numb){
prev = current;
System.out.println(prev.data);
}
else{
prev.next = current.next;
tail.next = current;
tail = current;
}
current =current.next;
}
tail.next = null;
}
それはヘッドノードが分割数よりも少ない整数を有する場合を正常に動作が、しかしエラーが発生します。これは、私のコードのelse文では、prev.nextがnullポインタ例外をスローするためです。なぜなら、nullでない値を持つif caseを決して通過しないからです。誰もがこれを修正する方法を提案することはできますか?ありがとうございました。
私はこの部分を理解していませんが、パーティション要素xは「正しいパーティション」のどこにでも表示できます。おそらくいくつかの事例を挙げることができますか? –