public RandomListNode copyRandomList(RandomListNode head) {
if(head==null)
return null;
HashMap<RandomListNode,RandomListNode> map = new HashMap<RandomListNode,RandomListNode>();
RandomListNode newhead = new RandomListNode(head.label);//build a newhead
map.put(head,newhead);//head -> newhead
RandomListNode oldp = head;//oldp
RandomListNode newp = newhead;//newp
while(oldp.next != null){
RandomListNode newnode = new RandomListNode(oldp.next.label);
newp.next = newnode;
map.put(oldp.next, newnode);
oldp = oldp.next;
newp = newp.next;
}
oldp = head;
newp = newhead;
while(oldp!=null){
newp.random = map.get(oldp.random);
oldp = oldp.next;
newp = newp.next;
}
return newhead;
}
refer: http://www.cnblogs.com/springfor/p/3864457.html