zoukankan      html  css  js  c++  java
  • 剑指 Offer 35. 复杂链表的复制(中等)

    通过率 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 ...(之后补充)
  • 相关阅读:
    嵌套矩形
    Multiplication Puzzle
    animate.css在vue项目中的使用
    服务器相关知识
    webpack-cli安装和插件的安装
    新买阿里云linux服务器如何设置账号密码xshell远程登陆
    主流请求库axios库的使用
    什么是回调函数
    js------match() 方法
    cookie
  • 原文地址:https://www.cnblogs.com/wwqzbl/p/15122154.html
Copyright © 2011-2022 走看看