繁体   English   中英

使用随机指针克隆链接列表C ++

[英]Clone a linked list with random pointer c++

我正在研究克隆具有随机指针的链表的问题。 问题陈述

LinkListNode* CloneLink(LinkListNode* orig){
    LinkListNode* cloneLinkStart=NULL;
    LinkListNode* head=orig;
    map<LinkListNode*,LinkListNode*> m;
    while(head){
        cloneLinkStart=new LinkListNode(head->val);
        m[cloneLinkStart]=head;
        head=head->next;
   }
   head=orig;
   while(head){
       cloneLinkStart=m[head];
       cloneLinkStart->next=m[head->next];
       cloneLinkStart->random=m[head->random];
       head=head->next;
   }
   return m[orig];
}

我已经从网上获得了这个想法,并试图实现它。 但是我在第二个while循环的第二行遇到了分段错误。 任何提示我的错误都会对我有所帮助。

if(!head)
        return head;
    RandomListNode* cloneLinkStart=NULL;
    RandomListNode* orig=head;
    map<RandomListNode*,RandomListNode*> m;
    while(orig){
        cloneLinkStart=new RandomListNode(orig->label);
        m[orig]=cloneLinkStart;
        orig=orig->next;
   }
   orig=head;
   while(orig){
       cloneLinkStart=m.find(orig)->second;
       if(orig->next)
            cloneLinkStart->next=m.find(orig->next)->second;
       else
            cloneLinkStart->next=NULL;
        if(orig->random)
            cloneLinkStart->random=m.find(orig->random)->second;
        else
            cloneLinkStart->random=NULL;
        orig=orig->next;
        cloneLinkStart=cloneLinkStart->next;
   }
   return m.find(head)->second;

我修改后的代码有效。 谢谢@杰里·科芬

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM