private SLLNodeRandom Clone(SLLNodeRandom head) { Dictionary <SLLNodeRandom, SLLNodeRandom> map = new Dictionary <SLLNodeRandom, SLLNodeRandom>(); SLLNodeRandom current = head; SLLNodeRandom cloneHead = null; while (current != null) { SLLNodeRandom cloneNode = new SLLNodeRandom(current.Value); if (cloneHead == null) { cloneHead = cloneNode; } map.Add(current, cloneNode); current = current.Next; } while (head != null) { if (head.Next != null) { map[head].Next = map[head.Next]; } if (head.Random != null) { map[head].Random = map[head.Random]; } head = head.Next; } return(cloneHead); }
public void Clone() { SLLNodeRandom head = new SLLNodeRandom(1); SLLNodeRandom node2 = new SLLNodeRandom(2); SLLNodeRandom node3 = new SLLNodeRandom(3); SLLNodeRandom node4 = new SLLNodeRandom(4); head.Next = node2; head.Random = node3; node2.Next = node3; node2.Random = node4; node3.Next = node4; node3.Random = node3; node4.Next = null; node4.Random = null; SLLNodeRandom node = Clone(head); }