【发布时间】:2017-08-07 23:36:22
【问题描述】:
我目前正在做一个破解编码面试问题(2.4),我应该围绕值 x 划分一个链表,这样所有小于 x 的节点都在所有大于或等于 x 的节点之前。但是,我真的很困惑为什么需要一个临时变量“next”以及为什么 node.next 在它下面为空。为什么我不能只在 while 循环结束时执行 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 就可以了。不过,您不仅仅是在迭代。
标签: java linked-list