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;
}
}
常见算法-复杂链表的复制
最新推荐文章于 2021-12-16 10:24:37 发布