【问题描述】
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
【AC代码】
1 /* 2 public class RandomListNode { 3 int label; 4 RandomListNode next = null; 5 RandomListNode random = null; 6 7 RandomListNode(int label) { 8 this.label = label; 9 } 10 } 11 */ 12 public class Solution { 13 public RandomListNode Clone(RandomListNode pHead) 14 { 15 if (pHead == null) return null; 16 17 RandomListNode currentNode = pHead; 18 while (currentNode != null) { 19 RandomListNode cloneNode = new RandomListNode(currentNode.label); 20 RandomListNode nextNode = currentNode.next; 21 currentNode.next = cloneNode; 22 cloneNode.next = nextNode; 23 currentNode = nextNode; 24 } 25 26 currentNode = pHead; 27 while (currentNode != null) { 28 currentNode.next.random = currentNode.random == null ? null : currentNode.random.next; 29 currentNode = currentNode.next.next; 30 } 31 32 currentNode = pHead; 33 RandomListNode pCloneHead = pHead.next; 34 while (currentNode != null) { 35 RandomListNode cloneNode = currentNode.next; 36 currentNode.next = cloneNode.next; 37 cloneNode.next = currentNode.next == null ? null : currentNode.next.next; 38 currentNode = currentNode.next; 39 } 40 41 return pCloneHead; 42 } 43 }