私は現在Coding Interview Problem(2.4)をクラッキングしていますが、xより小さいすべてのノードがx以上のすべてのノードの前に来るように、値xの周りのリンクリストを分割することになっています。しかし、私は本当に一時変数 "next"が必要で、どうしてnode.nextがその下にヌルになっているのか、本当に混乱しています。 whileループの最後でnode = node.nextだけを実行できないのはなぜですか?リンクされたリストを反復するためにnode = node.nextだけを実行することはできないのですか?
前後の2つのリンクされたリストを作成し、正しい値が各リストに入れられたら、それらを一緒にマージします。私は、whileループの最後にノード= node.nextを行うことができないのはなぜ
public static Node partition(Node node, int x) {
Node beforeStart = null;
Node beforeEnd = null;
Node afterStart = null;
Node afterEnd = null;
/* Partition list */
while (node != null) {
Node next = node.next;
node.next = null;
if (node.data < x) {
if (beforeStart == null) {
beforeStart = node;
beforeEnd = beforeStart;
} else {
beforeEnd.next = node;
beforeEnd = beforeEnd.next;
}
} else {
if (afterStart == null) {
afterStart = node;
afterEnd = afterStart;
} else {
afterEnd.next = node;
afterEnd = afterEnd.next;
}
}
node = next;
}
/* Merge before list and after list */
if (beforeStart == null) {
return afterStart;
}
beforeEnd.next = afterStart;
return beforeStart;
}
あなたがしていたことがすべてリストを反復していたら、node = node.nextは問題ありません。あなたは反復だけではありません。 – user2357112