138. Copy List with Random Pointer

Difficulty:
Related Topics:
Similar Questions:

Problem

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

Return a deep copy of the list.

Solution

/** * Definition for singly-linked list with a random pointer. * function RandomListNode(label) { * this.label = label; * this.next = this.random = null; * } */ /** * @param {RandomListNode} head * @return {RandomListNode} */ var copyRandomList = function(head) { if (!head) return null; var map = new Map(); var now = null; now = head; while (now) { map.set(now, new RandomListNode(now.label)); now = now.next; } now = head; while (now) { map.get(now).next = map.get(now.next) || null; map.get(now).random = map.get(now.random) || null; now = now.next; } return map.get(head); }; 

Explain:

ES6Map 可以用任意类型的 key。如果用 labelkey 的话,可能重复,直接 objectkey 就好。

Complexity: