leetcode原题
解题思路
- 先遍历原链表,复制所有的节点,并存入哈希表,key是原节点,value是复制的节点,next和random先都暂时复制为null
- 再遍历原链表,为复制的节点去赋值next和random指针,指针的来源就是,【原节点所指向的next和random节点,在hash表里映射对应的复制的节点】
/**
* @param {Node} head
* @return {Node}
*/
var copyRandomList = function(head) {
let cur = head
let hashMap = new Map()
while(cur){
hashMap.set(cur,new Node(cur.val,null,null))
cur = cur.next
}
cur = head
while(cur){
hashMap.get(cur).next = cur.next ? hashMap.get(cur.next) : null
hashMap.get(cur).random = cur.random ? hashMap.get(cur.random) : null
cur = cur.next
}
return hashMap.get(head)
}