public RandomListNode CopyRandomList(RandomListNode head) { if (head == null) { return(null); } Dictionary <RandomListNode, RandomListNode> hm = new Dictionary <RandomListNode, RandomListNode>(); RandomListNode newHead = new RandomListNode(head.label); hm.Add(head, newHead); RandomListNode p = head; RandomListNode q = newHead; p = p.next; while (p != null) { RandomListNode temp = new RandomListNode(p.label); hm.Add(p, temp); p = p.next; q.next = temp; q = temp; } p = head; q = newHead; while (p != null) { if (p.random != null) { q.random = hm[p.random]; } else { q.random = null; } p = p.next; q = q.next; } return(hm[head]); }
public void AppendToTaile(int data, int radom_data) { if (head == null) { head = new RandomListNode(data); head.next = null; head.random = null; } else { RandomListNode n = new RandomListNode(data); n.next = null; n.random = null; RandomListNode temp = head; while (temp.next != null) { temp = temp.next; } temp.next = n; } }
/*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.*/ public RandomListNode CopyRandomList(RandomListNode head) { if (head == null) { return(null); } //map <originalNode, newNode> Dictionary <RandomListNode, RandomListNode> mp = new Dictionary <RandomListNode, RandomListNode>(); RandomListNode res = new RandomListNode(0); RandomListNode p = head; RandomListNode q = res; while (p != null) { RandomListNode tmp = new RandomListNode(p.label); q.next = tmp; mp[p] = tmp; p = p.next; q = q.next; } p = head; q = res.next; while (p != null) { if (p.random == null) { q.random = null; } else { q.random = mp[p.random]; } p = p.next; q = q.next; } return(res.next); }