This method doesn’t use a HashMap.
/** * 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) { if (head == null) return null; // Step 1 - Store copy in next RandomListNode n = head; while (n != null) { RandomListNode c = new RandomListNode(n.label); c.next = n.next; n.next = c; n = c.next; } // Step 2 - Copy Random reference n = head; while (n != null) { if (n.random != null) { n.next.random = n.random.next; } n = n.next.next; } // Step 3 - Break references n = head; RandomListNode ret = head.next; while (n != null) { RandomListNode copy = n.next; n.next = copy.next; if (n.next != null) { copy.next = n.next.next; } n = n.next; } return ret; } }