我正在尝试解决“破解编码面试”一书中的“ 2.4分区”问题: 问题:给定一个链表和一个值x,对它进行分区,以使所有节点 小于x的节点位于大于或等于x的节点之前。
它以某种方式陷入无限循环。本书的解决方案与我的解决方案略有不同(对本书的解决方案进行了评论)。我试图了解为什么书中的解决方案有效而我的解决方案无效。
public static Node particion(Node node, int x) {
Node beforeStart = null;
Node beforeEnd = null;
Node afterStart = null;
Node afterEnd = null;
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 = node;
}
} else {
if(afterStart == null) {
afterStart = node;
afterEnd = afterStart;
} else {
afterEnd.next = node;
afterEnd = node;
}
}
// node = next;
node = node.next;
}
if(beforeStart == null) {
return afterStart;
}
beforeEnd.next = afterStart;
return beforeStart;
}
输入:3 5 8 5 10 2 1(分区= 5) 输出:3 2 1 5 8 5 10
相反,我无尽的输出是: 3 2 1 5 8 5 10 2 1 5 8 5 10 2 1 5 8 5 10 2 1 5 8 5 10(等)