输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
//这道题的思路:
1.首先在每一个结点之后复制一个相同值的新节点
2.然后复制每一个结点的随机指针;
3.最后将两个链表一分为二;
public Node copyRandomList(Node head){
if(head==null) return null;
//1.复制新的结点
Node cur=head;
while(cur!=null){
Node copyNode=new Node(cur.val);
copyNode.next=cur.next;
cur.next=copyNode;
cur=cur.next.next;
}
//2.复制某个结点的随机指针;
cur=head;
while(cur!=null){
if(cur.random!=null){
cur.next.random=cur.random.next;
}
}
Node copyHead=head.next;
cur=head;
curCopy=head.next;
while(cur!=null){
if(cur.next!=null){
cur.next=cur.next.next;
cur=cur.next;
}
if(copyNode.next!=null){
curCopy.next=curCopy.next.next;
curCopy=curCopy.next;
}
}
return copyHead;
}