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

∥☆過路亽.° 提交于 2020-01-02 23:54:49

算法描述:先复制节点,将复制的节点连接在原节点的后面
拷贝节点的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; 
    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!