在牛客网上刷题时,出现了如下的错误:
您的代码已保存 段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起 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的其中的组成部分,错误。