【LeetCode热题100】【链表】随机链表的复制

2024-04-22 09:12:03 浏览数 (1)

题目链接:138. 随机链表的复制 - 力扣(LeetCode)

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点,请你深拷贝这个链表

非常妙的思路,先用一个哈希表将旧链表的节点和新链表的节点一一对应起来,然后将新链表的节点串起来,对于random可以根据哈希表里面的对应找到新链表里面对应的节点,妙哉

代码语言:javascript复制
class Solution {
public:
    Node *copyRandomList(Node *head) {
        unordered_map<Node *, Node *> hash;
        Node *cur = head;
        while (cur) {
            hash[cur] = new Node(cur->val);
            cur = cur->next;
        }
        cur = head;
        while (cur) {
            hash[cur]->next = hash[cur->next];
            hash[cur]->random = hash[cur->random];
            cur = cur->next;
        }
        return hash[head];
    }
};

0 人点赞