1.p A->B->C->D->E=>A->A‘->B->B'->C->C'->D->D'->E->E'
2.找到A',B',C',D',E'的随机指针指向
3.将复制后的链表A' B' C' D' E'拆出来
public class Solution {
public RandomListNode Clone(RandomListNode pHead)
{
RandomListNode p=pHead;
while(p!=null){ //两个p之间插一个q
RandomListNode q=new RandomListNode(pHead.label);
q.next=p.next;
p.next=q;
p=q.next;
}
RandomListNode qHead=pHead.next,q=null;
q=qHead;
p=pHead;
while(q!=null){ //复制random指针
q.random=p.random.next;
q=q.next.next;
p=p.next.next;
}
q=qHead;
while(q!=null){ //拆除q链表
q.next=q.next.next;
q=q.next;
}
return qHead;
}
}
链表复制与随机指针处理
本文介绍了一种特殊的链表复制算法,该算法能在O(n)的时间复杂度内完成链表节点的复制及随机指针的正确赋值,并最终分离出完整的复制链表。

被折叠的 条评论
为什么被折叠?



