

java
/*
// Definition for a Node.
class Node {
int val;
Node next;
Node random;
public Node(int val) {
this.val = val;
this.next = null;
this.random = null;
}
}
*/
class Solution {
public Node copyRandomList(Node head) {
//null判断
if(head == null){
return null;
}
//制造分身
Node curr = head;
while(curr != null){
Node clone = new Node(curr.val);
clone.next = curr.next;
curr.next = clone;
curr = clone.next;
}
//复制random指针
curr = head;
while(curr != null){
if(curr.random != null){
curr.next.random = curr.random.next;
}
curr = curr.next.next;
}
//分离链表
curr = head;
Node cloneHead = head.next;
Node cloneCurr = cloneHead;
while(curr != null){
curr.next = curr.next.next;
if(cloneCurr.next != null){
cloneCurr.next = cloneCurr.next.next;
}
curr = curr.next;
cloneCurr = cloneCurr.next;
}
return cloneHead;
}
}
先复制一份相同的节点,指向为A->A'->B->B';
然后将random指针也复制一份;
最后将两组指针进行分离。