比较常见的错误是因为你复制了指针的值而不是指针自身。你需要创建一个哈希表,并且在第一遍遍历中为每个原节点和新节点建立一个映射。这样可以在第二遍遍历中通过哈希表找到每个原节点的新节点指针,并且更新它们的 next 和 random 指针。下面是一个参考代码:
var copyRandomList = function(head) {
if (!head) return null;
let map = new Map();
let node = head;
while (node) {
let copy = new Node(node.val);
map.set(node, copy);
node = node.next;
}
node = head;
while (node) {
let copy = map.get(node);
copy.next = map.get(node.next) || null;
copy.random = map.get(node.random) || null;
node = node.next;
}
return map.get(head);
};
下一篇:不知道为什么我会得到空指针异常。