第一步,在每个节点的后面插入复制的节点。
第二步,对复制节点的 random 链接进行赋值。
第三步,拆分
public RandomListNode Clone(RandomListNode pHead)
{
if(pHead == null){
return null;
}
//插入复制节点
RandomListNode cur = pHead;
while(cur!=null){
RandomListNode clone = new RandomListNode(cur.label);
clone.next = cur.next;
cur.next = clone;
cur = clone.next;
}
//为复制节点建立random连接
cur = pHead;
while(cur!=null){
RandomListNode clone = cur.next;
if(cur.random!=null)
clone.random = cur.random.next;
cur = clone.next;
}
//拆分两个链表
cur = pHead;
RandomListNode pCloneHead = pHead.next;
while(cur.next!=null){
//此处temp在拆分过程中交替表示复制节点
RandomListNode temp = cur.next;
cur.next = temp.next;
cur = temp;
}
return pCloneHead;
}