复制一个复杂链表

在牛客网上刷题时,出现了如下的错误:

您的代码已保存 段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起 case通过率为0.00%

试题题目为:复杂链表的复制。

class Solution {
public:
    RandomListNode* Clone(RandomListNode* pHead)
    {if(pHead == NULL) return NULL;        
        unordered_multimap<RandomListNode*, RandomListNode*> list;
        
        RandomListNode * CloneNode = new RandomListNode(pHead->label);
        CloneNode->next = NULL;
        CloneNode->random = NULL;
        
        RandomListNode * pNode = pHead;
        RandomListNode * pCloneNode = CloneNode;
          //错误代码部分
        while(pNode){ 
            list.insert(make_pair(pNode,pCloneNode));
            
            pNode = pNode->next;
            RandomListNode * pCloneTail = new RandomListNode(pNode->label);
            pCloneTail-> next = NULL;
            pCloneTail-> random = NULL;
            
            pCloneNode->next = pCloneTail;
            pCloneNode = pCloneTail;
            
        }
        
        pNode = pHead;
        pCloneNode = CloneNode;
        while(pNode){
            if(pNode->random)
            pCloneNode-> random = list.find(pNode->random)->second;
            
            pNode = pNode->next;
            pCloneNode = pCloneNode->next;
        }
        
        return CloneNode;
    }
};

错误为第一个while语句块中,判断语句为pNode 如果pNode为NULL则跳出,但是在下面的语句中出现逻辑错误,即如果pNode为NULL时,还要继续去寻找pNode的next ,但是pNode已经为NULL了,则寻找已经为NULL的其中的组成部分,错误。

猜你喜欢

转载自blog.csdn.net/yu1150/article/details/80496868