题目:随机链表的复制

使用到的是哈希表

思路:因为第一次遍历复制各个结点的时候,是不知道后面的节点的,因此一次遍历无法将random元素对应上去,所以一共需要两次遍历:第一次复制所有节点并并对应的random与当前节点绑定,第二次将当前节点的random元素指向对应的成员

 1Node* copyRandomList(Node* head)
 2    {
 3        if(head == nullptr) return nullptr;
 4        Node* curr = head;
 5        std::unordered_map<Node*, Node*> map;
 6
 7        while(curr != nullptr)
 8        {
 9            map[curr] = new Node(curr->val);
10            curr = curr->next;
11        }
12
13        curr = head;
14        while(curr != nullptr)
15        {
16            map[curr]->next = map[curr->next];
17            map[curr]->random = map[curr->random];
18            curr = curr->next;
19        }
20        return map[head];
21    }