leetcode-剑指 Offer 35. 复杂链表的复制

61 阅读1分钟

image.png 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);
}