您的位置:首页 > 运维架构

LeetCode "Copy List with Random Pointer"

2014-07-23 12:39 387 查看
Two passes: all pointer linking info will be recorded in 1st pass - to hashmap; 2nd pass recover the pointer relationship from hashmap. 1A!

class Solution {
public:
RandomListNode *copyRandomList(RandomListNode *head) {
if (!head) return NULL;

vector<RandomListNode *> vec;
unordered_map<RandomListNode *, unsigned> ptrMap;
//    1st pass
RandomListNode *p = head;
unsigned i = 0;
while (p)
{
RandomListNode *pCurr = new RandomListNode(p->label);
pCurr->random = p->random;
pCurr->next = p->next;
vec.push_back(pCurr);
ptrMap.insert(make_pair(p, i ++));
p = p->next;
}
//    2nd pass
for (int i = 0; i < vec.size(); i++)
{
RandomListNode *pCurr = vec[i];
if (pCurr->next)    pCurr->next = vec[ptrMap[pCurr->next]];
if (pCurr->random)    pCurr->random = vec[ptrMap[pCurr->random]];
}
return vec[0];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: