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.
1 /** 2 * Definition for singly-linked list with a random pointer. 3 * public class RandomListNode { 4 * public int label; 5 * public RandomListNode next, random; 6 * public RandomListNode(int x) { this.label = x; } 7 * }; 8 */ 9 public class Solution { 10 public RandomListNode CopyRandomList(RandomListNode head) { 11 if (head == null) return null; 12 13 RandomListNode newHead = new RandomListNode(head.label), cur = head, newCur = newHead; 14 15 var dict = new Dictionary<RandomListNode, RandomListNode>(); 16 dict[head] = newHead; 17 18 while (cur.next != null) 19 { 20 var n = new RandomListNode(cur.next.label); 21 dict[cur.next] = n; 22 newCur.next = n; 23 cur = cur.next; 24 newCur = newCur.next; 25 } 26 27 cur = head; 28 newCur = newHead; 29 30 while (cur != null) 31 { 32 if (cur.random != null && dict.ContainsKey(cur.random)) 33 { 34 newCur.random = dict[cur.random]; 35 } 36 37 cur = cur.next; 38 newCur = newCur.next; 39 } 40 41 return newHead; 42 } 43 }