给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝⭐⭐⭐⭐⭐
①建立老节点新节点交替的链表。
②循环解决random指针问题:老节点.next.random=新节点.random.next
③.拆分链表。cur–>需要拆开的节点。
class Solution {
public Node copyRandomList(Node head) {
if(head==null){
return null;
}
Node cur=head;
while(cur!=null){
Node node=new Node(cur.val,cur.next,null);
cur.next=node;
cur=cur.next.next;
}
cur=head;
while(cur!=null){
if(cur.random!=null){
cur.next.random=cur.random.next;
}else{
cur.next.random=null;
}
cur=cur.next.next;
}
cur=head;
Node newHead=cur.next;
while(cur.next!=null){
Node tmp=cur.next;
cur.next=tmp.next;
cur=tmp;
}
return newHead;
}
}