A linked list is given such this each node contains an additional random pointer which could point to all node in the list or null.
Return a deep copy of the list.
structRandomlistnode {intlabel; Randomlistnode*next, *Random; Randomlistnode (intx): Label (x), Next (null), random (null) {}};classSolution { Public: Randomlistnode*copyrandomlist (Randomlistnode *head) { if(!head)returnNULL; Map<randomlistnode *, Randomlistnode *>Flag; Randomlistnode*root =Copynode (head, flag); returnRoot; } Randomlistnode* Copynode (Randomlistnode *source, Map<randomlistnode *, Randomlistnode *> &flag) { if(Flag.find (source)! =Flag.end ()) { returnFlag[source]; } Randomlistnode*target =NewRandomlistnode (source->label); Flag[source]=Target; if(source->next) Target->next = Copynode (source->Next,flag); if(source->random) Target->random = Copynode (source->Random,flag); returnTarget; }};
138. Copy List with Random Pointer (Graph, Map; DFS)