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.
public class Solution {
public RandomListNode copyRandomList(RandomListNode head) {
if(head==null){
return head;
}
RandomListNode h=head;
while(h!=null){
RandomListNode next=h.next;
RandomListNode node=new RandomListNode(h.label);
h.next=node;
node.next=next;
h=next;
}
h=head;
while(h!=null&&h.next!=null){
h.next.random=h.random==null?null:h.random.next;
h=h.next.next;
}
h=head.next;
RandomListNode node=head;
while(node!=null&&node.next!=null){
RandomListNode next=node.next.next;
RandomListNode nodecopy=node.next;
node.next=next;
nodecopy.next=next!=null?next.next:null;
node=next;
}
return h;
}
}