A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
/**
* Definition for singly-linked list with a random pointer.
* class RandomListNode {
* int label;
* RandomListNode next, random;
* RandomListNode(int x) { this.label = x; }
* };
*/
public class Solution {
public RandomListNode copyRandomList(RandomListNode head) {
if(head==null)
return null;
//复制各节点
RandomListNode p = head;
while(p!=null){
RandomListNode copy_node = new RandomListNode( p.label );
copy_node.next = p.next;
p.next = copy_node;
p = copy_node.next;
}
//复制随机节点
RandomListNode head1 = head.next;
p = head;
RandomListNode p1 = head1;
while(p.next.next!=null){
if( p.random!=null ){
p1.random = p.random.next;
}
p = p.next.next;
p1 = p.next;
}
if( p.random!=null ){
p1.random = p.random.next;
}
//断开原链表与复制链表
p = head;
p1 = head1;
while( p1.next!=null ){
p.next = p.next.next;
p1.next = p1.next.next;
p = p.next;
p1 = p1.next;
}
p.next = null;
return head1;
}
}