算法描述:先复制节点,将复制的节点连接在原节点的后面
拷贝节点的random ; 复制节点的random若非空节点,则复制节点的random为原节点random的next
链接复制链表和恢复原链表
Node* copyRandomList(Node* head) {
//复制节点
Node* cur=head;
while(cur)
{
Node* next=cur->next;
Node * copy=(Node *)malloc(sizeof(Node));
//拷贝数值
copy->val=cur->val;
//链接拷贝的节点
cur->next=copy;
copy->next=next;
//迭代
cur=next;
}
//置拷贝的random
cur=head;
while(cur)
{
Node* copy=cur->next;
if(cur->random==NULL)
{
copy->random=NULL;
}
else
{
copy->random=cur->random->next;
}
//迭代
cur=copy->next;
}
//把拷贝的节点接下来,连接成链表并把原链表回复
cur=head;
Node *copyHead=NULL,*copyTail=NULL;
while(cur)
{
Node* copy=cur->next;
Node* next=copy->next;//copy是否为空
if(copyTail==NULL)
{
copyHead=copyTail=copy;
}
else{
copyTail->next=copy;
copyTail=copy;
}
cur->next=next;//链接原链表
cur=next;
}
return copyHead;
}