题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
思路
递归
class Solution {
public:
RandomListNode* Clone(RandomListNode* pHead)
{
if(pHead==NULL)
return NULL;
//复制头节点
RandomListNode* pClonedHead=new RandomListNode(pHead->label);
//复制剩下的节点
copy(pClonedHead, pHead);
return pClonedHead;
}
void copy(RandomListNode* clone, RandomListNode* raw)
{
if(raw->next!=NULL)
clone->next=new RandomListNode(raw->next->label);
if(raw->random!=NULL)
clone->random=new RandomListNode(raw->random->label);
if(raw->next!=NULL)
//递归复制
copy(clone->next, raw->next);
}
};