public void Test() { RandomListNode node1 = new RandomListNode(1); RandomListNode node2 = new RandomListNode(2); RandomListNode node3 = new RandomListNode(3); node1.next = node2; node1.random = node3; node2.next = node3; node2.random = null; node3.next = null; node3.random = node1; RandomListNode head = node1; RandomListNode copy = CopyRandomList(head); RandomListNode node = copy; while (node != null) { Console.Write(node.label + " "); if (node.random != null) { Console.Write(node.random.label); } Console.WriteLine(); node = node.next; } Console.ReadLine(); }
//给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 //要求返回这个链表的深度拷贝。 public RandomListNode CopyRandomList(RandomListNode head) { RandomListNode node = head; List <RandomListNode> list = new List <RandomListNode>(); while (node != null) { list.Add(node); node = node.next; } RandomListNode copy = null; RandomListNode last = null; List <RandomListNode> copyList = new List <RandomListNode>(list.Count); foreach (RandomListNode e in list) { RandomListNode newNode = new RandomListNode(e.label); copyList.Add(newNode); if (copy == null) { copy = newNode; } else { last.next = newNode; } last = newNode; } node = copy; for (int i = 0; i < list.Count; i++) { if (list[i].random != null) { int randomIndex = list.IndexOf(list[i].random); node.random = copyList[randomIndex]; } node = node.next; } return(copy); }