题解:复制带随机指针的链表

算法描述:先复制节点,将复制的节点连接在原节点的后面
拷贝节点的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; 
    }
发布了24 篇原创文章 · 获赞 1 · 访问量 378

猜你喜欢

转载自blog.csdn.net/weixin_43519514/article/details/103811050
今日推荐