package common;
/**
* @author : zhaoliang
* @program :newCoder
* @description : 复杂链表的复制
* @create : 2020/11/28 15:55
*/
public class RandomListClone {
//输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),
//请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
public class RandomListNode{
int label;
RandomListNode next =null;
RandomListNode random=null;
RandomListNode(int val){
label = val;
}
}
public RandomListNode clone(RandomListNode phead){
if (phead ==null)return phead;
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;
}
//拆分clone链表
cur = phead;
RandomListNode pCloneHead = phead.next;
while (cur.next!=null){
RandomListNode next = cur.next;
cur.next = next.next;
cur = next;
}
return pCloneHead;
}
}
版权声明:本文为sinat_40968110原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。