您的位置:首页 > 其它

复杂链表的复制

2016-03-29 22:52 127 查看
这道题目首先不管random指针,按照next指针把链表元素给复制出来。然后处理random指针,比较容易想到的想法是利用哈希思想(或者等价的map,set等stl容器),但这样的话需要辅助空间。

不需要辅助空间的方法,复制元素的时候把原始链表改成这样就可以了:

class Solution {
public:
RandomListNode* Clone(RandomListNode* pHead)
{
if(pHead==NULL)
return NULL;
RandomListNode* root=pHead;
while(root)
{
RandomListNode* p=new RandomListNode(root->label);
p->next=root->next;
root->next=p;
root=p->next;
}
root=pHead;
while(root)
{
if(root->random!=NULL)
root->next->random=root->random->next;
root=root->next->next;
}
RandomListNode* result=pHead->next;
RandomListNode* prev=result;
root=pHead;
while(root->next->next!=NULL)
{
root->next=prev->next;
root=root->next;
prev->next=prev->next->next;
prev=prev->next;
}
root->next=NULL;
return result;
}
};


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: