1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
class Solution { public: Node* copyRandomList(Node* head) { int i = 0; auto headTmp = head; Node* newHead = new Node(0); Node* newHeadTmp = newHead; unordered_map<Node*, int> map; vector<Node*> newMap; while(headTmp) { Node* nodeTmp = new Node(headTmp->val); newHeadTmp->next = nodeTmp; newHeadTmp = newHeadTmp->next; newMap.push_back(nodeTmp); map[headTmp] = i++; headTmp = headTmp->next; } headTmp = head; newHeadTmp = newHead; newHead = newHead->next; delete newHeadTmp; i = 0; while(headTmp) { if(headTmp->random) newMap[i]->random = newMap[map[headTmp->random]]; else newMap[i]->random = nullptr; ++i; headTmp = headTmp->next; } return newHead; } };
|