# [Copy List with Random Pointer](https://leetcode.com/problems/copy-list-with-random-pointer/) ## Problem Statement: Given a linked list, return the deep copy of it. input Linked List structure. ``` // Definition for a Node. class Node { public: int val; Node* next; Node* random; Node(int _val) { val = _val; next = NULL; random = NULL; } }; ``` ## Solution Approach The idea is to make deep copy of every pointer and cache {original:copy} pointer and assign the `random` pointer in next iteration. ## Code ``` class Solution { public: Node* copyRandomList(Node* head) { if(head==NULL) return NULL; Node* copy = new Node(-1); Node* run = copy; unordered_map<Node*,Node*>cache; Node* t = head; while(t){ Node* a = new Node(t->val); run->next=a; run =run->next; cache[t]=a; t=t->next; } t=head,run=copy->next; while(t){ run->random = cache[t->random]; run = run->next; t=t->next; } return copy->next; } }; ```