您的位置:首页 > 其它

复杂链表的复制

2016-06-14 12:18 344 查看
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。
算法:1)复制正常的链表,不考虑随机节点2)将每一个节点和复制的节点对应到hash表中,这样在原链表中节点的随机节点和复制链表节点的随机节点也是对应的。
代码:
struct RandomListNode {
int label;
struct RandomListNode *next, *random;
RandomListNode(int x) :
label(x), next(NULL), random(NULL) {
}
};

class Solution {
public:
RandomListNode* Clone(RandomListNode* pHead)
{
if(pHead == NULL)
return NULL;
map<RandomListNode*,RandomListNode*>mp;
RandomListNode *p = pHead->next;
RandomListNode *newhead = new RandomListNode(pHead->label);
mp[pHead] = newhead;
RandomListNode *pre = newhead;
while (p!=NULL){
RandomListNode* newp = new RandomListNode(p->label);
mp[p] = newp;
pre->next = newp;
pre = newp;
p = p->next;
}
p = pHead;
RandomListNode *np,*tmp,*newtmp;
np = newhead;
while (p!=NULL){
tmp = p->random;
if(mp.count(tmp)){
newtmp = mp[tmp];
np->random = newtmp;
}
else{
np->random = NULL;
}
np = np->next;
p = p->next;
}
return newhead;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: