输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
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 if(pHead==null) 15 return null; 16 RandomListNode pCur = pHead; 17 //复制next 如原来是A->B->C 变成A->A'->B->B'->C->C' 18 while(pCur!=null){ 19 RandomListNode node = new RandomListNode(pCur.label); 20 node.next = pCur.next; 21 pCur.next = node; 22 pCur = node.next; 23 } 24 pCur = pHead; 25 //复制random pCur是原来链表的结点 pCur.next是复制pCur的结点 26 while(pCur!=null){ 27 if(pCur.random!=null) 28 pCur.next.random = pCur.random.next; 29 pCur = pCur.next.next; 30 } 31 RandomListNode head = pHead.next; 32 RandomListNode cur = head; 33 pCur = pHead; 34 //拆分链表 35 while(pCur!=null){ 36 pCur.next = pCur.next.next; 37 if(cur.next!=null) 38 cur.next = cur.next.next; 39 cur = cur.next; 40 pCur = pCur.next; 41 } 42 return head; 43 } 44 }