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.
/** * Definition for singly-linked list with a random pointer. * class RandomListNode { * int label; * RandomListNode next, random; * RandomListNode(int x) { this.label = x; } * }; */ public class Solution { public RandomListNode copyRandomList(RandomListNode head) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. if (head == null){ return null; } RandomListNode result = new RandomListNode(head.label); RandomListNode p = head.next; RandomListNode pc = result; HashMap ht = new HashMap(); ht.put(head,result); while (p!=null) { RandomListNode tmp = new RandomListNode(p.label); pc.next = tmp; ht.put(p,tmp); p = p.next; pc = pc.next; } p = head; pc = result; while (p!=null){ if (p.random!=null){ pc.random = (RandomListNode) ht.get(p.random); } p = p.next; pc = pc.next; } return result; } }