题目描述
复杂链表的复制
源码
class Solution {
public:
void CloneNode(RandomListNode* pHead)
{
RandomListNode* t = pHead;
while(t!=NULL)
{
RandomListNode* pnewnode = new RandomListNode(0);
pnewnode->label = t->label;
pnewnode->next = t->next;
t->next = pnewnode;
t = pnewnode->next;
}
}
void ConnectSecondPoint(RandomListNode* pHead)
{
RandomListNode * pNode = pHead;
while(pNode)
{
RandomListNode* pClone = pNode->next;
if(pNode->random)
{
pClone->random = pNode->random->next;
}
pNode = pClone->next;
}
}
RandomListNode* ReconnectNodes(RandomListNode* pHead)
{
RandomListNode* pNode = pHead;
RandomListNode* pCloneHead = NULL;
RandomListNode* pCloneNode = NULL;
if(pNode)
{
pCloneNode = pCloneHead = pNode->next;
pNode->next = pCloneNode->next;
pNode = pCloneNode->next;
}
while(pNode)
{
pCloneNode->next = pNode->next;
pCloneNode = pCloneNode->next;
pNode->next = pCloneNode->next;
pNode = pNode->next;
}
return pCloneHead;
}
RandomListNode* Clone(RandomListNode* pHead)
{
CloneNode(pHead);
ConnectSecondPoint(pHead);
return ReconnectNodes(pHead);
}
};