题目:随机链表的复制
使用到的是哈希表
思路:因为第一次遍历复制各个结点的时候,是不知道后面的节点的,因此一次遍历无法将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 }