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 cur = head;
while(cur != null){
RandomListNode node = new RandomListNode(cur.label);
node.next = cur.next;
cur.next = node;
cur = node.next;
//cur = cur.next.next;
}
cur = head;
while(cur != null){
cur.next.random = (cur.random != null ) ? cur.random.next :null;
cur = cur.next.next;
}
RandomListNode newHead = head.next;
cur = newHead;
while(head != null){
head.next = head.next.next;
cur.next = (cur.next != null) ? cur.next.next : null;
head = head.next;
cur= cur.next;
}
return newHead;
}
}