通过率 72.2%
题目描述:
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
示例 1:
输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
示例 2:
输入:head = [[1,1],[2,1]]
输出:[[1,1],[2,1]]
示例 3:
输入:head = [[3,null],[3,0],[3,null]]
输出:[[3,null],[3,0],[3,null]]
示例 4:
输入:head = []
输出:[]
解释:给定的链表为空(空指针),因此返回 null。
提示:
-10000 <= Node.val <= 10000
Node.random 为空(null)或指向链表中的节点。
节点数目不超过 1000 。
思路:
本题难点:构建各节点的random引用指向
看了题解后才知道的,用 map哈希表 或者 拼接+拆分链表
1 /*JavaScript 哈希表*/ 2 /** 3 * // Definition for a Node. 4 * function Node(val, next, random) { 5 * this.val = val; 6 * this.next = next; 7 * this.random = random; 8 * }; 9 */ 10 11 /** 12 * @param {Node} head 13 * @return {Node} 14 */ 15 var copyRandomList = function(head) { 16 if(!head) return head 17 var map = new Map() 18 var p = head 19 //复制节点 20 while(p) { 21 map.set(p, new Node(p.val)) // 添加键值对 (原 p 节点, 新 p 节点) 22 p = p.next 23 } 24 p = head 25 26 var res = map.get(p) 27 var q = res 28 while(p) { 29 q.next = p.next ? map.get(p.next) : null 30 q.random = map.get(p.random) 31 p = p.next 32 q = q.next 33 } 34 return res 35 };
1 /*JavaScript 拼接+拆分链表*/ 2 ...(之后补充)