【发布时间】:2015-05-10 22:37:24
【问题描述】:
我正在尝试展平多级链接列表。 给定一个链表,其中每个节点都表示一个链表并包含其类型的两个指针: (i) 指向主列表中下一个节点的指针(我们在下面的代码中称其为“右”指针) (ii) 指向此节点为头的链表的指针(我们在下面的代码中将其称为“向下”指针)。 所有链表都已排序
5 -> 10 -> 19 -> 28
| | | |
V V V V
7 20 22 35
| | |
V V V
8 50 40
| |
V V
30 45
到
5 7 8 10 19 20 22 28 30 35 40 45 50
下面是我的 Java 代码:
public class FlattenAList {
public static MultiNode<Integer> end = new MultiNode<Integer>(0);
public static MultiNode<Integer> result = end;
public static MultiNode flatten(MultiNode head) {
if (head == null || head.right == null)
return head;
MultiNode<Integer> tmp = head;
while (tmp != null) {
merge(tmp, result);
tmp = tmp.right;
}
return result;
}
public static void merge(MultiNode<Integer> a, MultiNode<Integer> b) {
if (a == null) {
end.down = b;
end = end.down;
return;
}
if (b == null) {
end.down = a;
end = end.down;
return;
}
if (a.data <= b.data) {
end.down = a;
end = end.down;
merge(a.down, b);
} else {
end.down = b;
end = end.down;
merge(a, b.down);
}
}
}
合并函数有问题,我收到 java.lang.StackOverflowError 在 java.lang.Integer.intValue(Unknown Source)
在 if (a.data
【问题讨论】:
-
你扁平化的逻辑是什么?形容它。例如,输入中有一个
20,输出中有两个。您的输入中有一个28,而您的输出中没有它。 -
那么解释呢?目前,此问题将作为“为什么此代码不起作用”类型的问题关闭。您需要学习使用调试器并创建 SSCCE。这里的代码太多了。并且没有解释它应该做什么。
-
它应该展平排序列表列,请查看上面的描述
-
所以你想做一个内联展平?
-
那么
end来自哪里?
标签: java data-structures linked-list