建站公司用的 商城系统,聊城市东昌府区建设路小学网站,网站如何做流量赚钱吗,网站侧面菜单展开怎么做leetcode 138
思路
利用哈希表解答
使用哈希表来建立原节点和复制节点之间的映射关系#xff0c;具体思路如下#xff1a;
第一次遍历原链表#xff1a;为每个原节点创建一个对应的复制节点#xff0c;并将原节点和复制节点的映射存入哈希表中。同时#xff0c;将复制…leetcode 138
思路
利用哈希表解答
使用哈希表来建立原节点和复制节点之间的映射关系具体思路如下
第一次遍历原链表为每个原节点创建一个对应的复制节点并将原节点和复制节点的映射存入哈希表中。同时将复制节点连接成一个新链表第二次遍历原链表通过哈希表查找每个原节点的random指针所指向的节点并为对应的复制节点设置random指针
关键步骤
创建复制节点并建立映射
遍历原链表为每个节点创建值相同的新节点使用Map存储原节点到新节点的映射关系将新节点依次连接成一个新链表
设置随机指针
再次遍历原链表对于每个节点的random指针通过哈希表查找对应的复制节点并设置新链表中对应节点的random指针 时间复杂度O(n) 空间复杂度 O(n) 实现
var copyRandomList function (head) {let cur head;let dummy new Nodelist();let copyCur dummy;const map new Map();while (cur) {const val cur.val;copyCur.next new Nodelist(val);map.set(cur, copyCur.next);cur cur.next;copyCur copyCur.next;}cur head, copyCur dummy.next;while (cur) {copyCur.random map.get(cur.random) || null;cur cur.next;copyCur copyCur.next;}return dummy.next;
};class Nodelist {constructor(val) {this.val val;this.next null;this.random null;}
}