我目前正在破解編碼訪問問題(2.4),我應該圍繞一個值x對鏈表進行分區,使得所有小於x的節點在所有節點大於或等於x之前出現。然而,我很困惑,爲什麼需要一個臨時變量「next」,爲什麼node.next在它之下。爲什麼我不能在while循環結束時執行node = node.next?爲什麼我不能只用node = 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