目录
题目
- 深拷贝一个链表,要求新链表中的每个节点都是新创建的,并且这些节点的 random 指针都指向新链表中的相应节点。
哈希表
- 先使用Map建立映射,然后根据映射将random和next指针指向对应的节点或者null
var copyRandomList = function (head) {
// 如果链表为空,直接返回null
if (!head) return head;
let cur = head; // 当前节点指针
const map = new Map(); // 用于存储原节点与新节点的映射关系
// 第一次遍历,生成一个具有val属性的新链表
while (cur) {
// 将原节点cur作为键,创建新节点并存入map
map.set(cur, new Node(cur.val));
cur = cur.next; // 移动到下一个节点
}
// 第二次遍历,根据map映射关系,将random和next指针指向对应的节点或者null
cur = head; // 重新将cur指向链表的头节点
while (cur) {
// 设置新节点的next指针
map.get(cur).next = map.get(cur.next) || null; // 如果cur.next存在,则指向新节点,否则指向null
// 设置新节点的random指针
map.get(cur).random = map.get(cur.random) || null; // 如果cur.random存在,则指向新节点,否则指向null
cur = cur.next; // 移动到下一个节点
}
return map.get(head); // 返回深拷贝链表的头节点
};
标签:map,cur,random,next,链表,随机,138,节点
From: https://www.cnblogs.com/lushuang55/p/18654634