struct Node* copyRandomList(struct Node* head) {
struct Node* cur=head;
//间隙插入一个复制结点
while(cur)
{
struct Node*copy=(struct Node*)malloc(sizeof(struct Node));
struct Node*next=cur->next;
copy->val=cur->val;
cur->next=copy;
copy->next=next;
cur=next;
}
//链接random
cur=head;
while(cur)
{
struct Node*copy=cur->next;
if(cur->random==NULL)
{
copy->random=NULL;
}
else
{
copy->random=cur->random->next;
}
cur=copy->next;
}
//解链
cur=head;
struct Node*newHead=NULL;
struct Node*tail=NULL;
while(cur)
{
struct Node*copy=cur->next;
struct Node*next=copy->next;
if(tail==NULL)
{
newHead=tail=copy;
}
else
{
tail->next=copy;
tail=copy;
}
cur->next=next;
cur=next;
}
return newHead;
}