或许你和我一样,题目拿到手先想到的是用map来映射每一个值对应的节点,劈里啪啦代码敲了半天,段错误QAQ
对着题解比较了半天发现大家思路都一样啊,仔细看了好久才看出来坑在哪:
1、点此查看相关讯息 里有写了,lable是不会重复的
2、不是每一个节点都存在random指针的,要做一个是否存在的判断
兄弟们,要认真读题啊
class Solution { public: RandomListNode* Clone(RandomListNode* pHead) { if(pHead == NULL) return NULL; map<int,RandomListNode*> cache; RandomListNode *root = pHead,*ansroot = new RandomListNode(pHead->label),*ans=ansroot; cache[pHead->label] = ansroot; while(pHead->next!=nullptr)//复制链表到ansroot { pHead = pHead->next; RandomListNode* temp = new RandomListNode(pHead->label); temp->next = pHead->next; ans->next = temp; cache[pHead->label] = temp; ans = ans->next; } //处理随机节点指针 pHead = root; RandomListNode *r = ansroot; while(pHead != nullptr) { if(pHead->random!=nullptr)//不是所有节点都有random指针 { r->random = cache[pHead->random->label]; } r = r->next; pHead = pHead->next; } return ansroot; } };