剑指Offer——复杂链表的复制(JS实现)

简介: 剑指Offer——复杂链表的复制(JS实现)

题目描述

image.png

解题思路

  • 使用Map数据结构来进行赋值
  • 键存放指向节点的指针
  • 值存放new Node
  • 第一次循环构建Map数据结构
  • 第二次循环给值的next域和random域进行赋值
  • 记住一点:这里的值的next域和random域不能指向node的节点,只能指向map数据结构中的值的节点

实现代码

var copyRandomList = function(head) {
    // 首先创建一个Map,键用来存储head指针域,值用来存储复制的节点
    let node = head;
    const m = new Map();
    // 遍历现有链表
    while (node) {
        m.set(node,new Node(node.val));
        node = node.next;
    }
    // 到这里,链表的键已经存放的是指针,值存放的是next域和random域为空,值为指针所指的val
    // 让node重新指向head
    node = head;
    // 第二次遍历,给Map数据结构中的值,添加上next域和random域
    while (node) {
        m.get(node).next = node.next ? m.get(node.next):null;
        m.get(node).random = node.random ? m.get(node.random):null;
        node = node.next;
    }
    node = head;
    return m.get(node);
};
相关文章
|
3月前
|
存储 JSON JavaScript
「offer来了」保姆级巩固你的js知识体系(4.0w字)
该文章提供了JavaScript知识体系的全面复习资料,覆盖了从基础语法到高级特性如闭包、原型链、异步编程等多个方面,并通过大量的面试题和实例代码帮助巩固理解。
「offer来了」保姆级巩固你的js知识体系(4.0w字)
|
2月前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
53 0
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
54 5
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
46 4
|
4月前
|
存储 JavaScript 前端开发
JavaScript实现单向链表
JavaScript实现单向链表
25 0
|
7月前
|
Java C语言
剑指offer(牛客)——合并两个排序的链表
剑指offer(牛客)——合并两个排序的链表
42 1
|
7月前
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
|
7月前
【一刷《剑指Offer》】面试题 16:反转链表
【一刷《剑指Offer》】面试题 16:反转链表
|
7月前
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
|
7月前
|
机器学习/深度学习
【一刷《剑指Offer》】面试题 13:在 O(1) 时间删除链表结点
【一刷《剑指Offer》】面试题 13:在 O(1) 时间删除链表结点