138. Copy List with Random Pointer (Graph, Map; DFS)
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
struct RandomListNode { int label; RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL), random(NULL) {} }; class Solution { public: RandomListNode *copyRandomList(RandomListNode *head) { if(!head) return NULL; map<RandomListNode *, RandomListNode *> flag; RandomListNode *root = copyNode(head, flag); return root; } RandomListNode * copyNode(RandomListNode *source, map<RandomListNode *, RandomListNode *> &flag) { if(flag.find(source)!=flag.end()) { return flag[source]; } RandomListNode *target = new RandomListNode (source->label); flag[source]=target; if(source->next) target->next = copyNode (source->next,flag); if(source->random) target->random = copyNode (source->random,flag); return target; } };