I implement my codes according to the "classical answer on Google". Looks correct and I tried it on my vs2010, which works well...

```
RandomListNode *copyRandomList(RandomListNode *head) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
if(head==NULL)
return NULL;
RandomListNode *tmp,*tmpnew;
RandomListNode *headnew;
//duplicate by insertion
for(tmp=head;tmp!=NULL;tmp=tmp->next)
{
RandomListNode *tmpnew = new RandomListNode(tmp->label);//new node
tmpnew->next = tmp->next;
tmp->next = tmpnew;
}
//tackle random
for(tmp=head;tmp!=NULL;tmp=tmp->next->next)
{
if(tmp->random!=NULL)
tmp->next->random = tmp->random->next;
}
// restore two lists
headnew = head->next;
for(tmp=head,tmpnew=headnew;tmp!=NULL;)
{
RandomListNode *n=tmp->next->next;
tmp->next = n;
tmpnew->next = n->next;
tmp=tmp->next;
tmpnew=tmpnew->next;
}
return headnew;
}
```