您的位置:首页 > 其它

复杂链表的复制问题的分析

2018-03-12 19:56 302 查看
对于此问题采用化解法解决,
分为三步进行:
1、先复制所有的节点链接在原来的节点后面 void CopyList(RandomListNode* pHead)
{

RandomListNode* pNode = pHead;
while(pNode!=NULL)
{
RandomListNode* copyList =new RandomListNode( pNode->label);
copyList->next = pNode->next;
copyList->random = NULL;

pNode->next = copyList;
pNode = copyList->next;
}
}2、其次,将原来节点的随机节点开始复制指向 void CopyList(RandomListNode* pHead)
{

RandomListNode* pNode = pHead;
while(pNode!=NULL)
{
RandomListNode* copyList =new RandomListNode( pNode->label);
copyList->next = pNode->next;
copyList->random = NULL;

pNode->next = copyList;
pNode = copyList->next;
}
}3、再将链表分开 RandomListNode* ConnectList(RandomListNode* pHead)
{
RandomListNode* pNode = pHead;
RandomListNode* copyNode =NULL;
RandomListNode* copyHead = NULL;
if(pNode!=NULL)
{
copyHead = copyNode = pNode->next;//将头结点和第一个节点找出
pNode->next = copyNode->next;
if(pNode!=NULL)
pNode = pNode->next;
}
while(pNode!=NULL)
{
copyNode->next = pNode->next;
copyNode = copyNode->next;
pNode->next = copyNode->next;
if(pNode!=NULL)
pNode = pNode->next;
}
return copyHead;
}将这三步合起来即复杂链表的复制 RandomListNode* Clone(RandomListNode* pHead)
{
if(!pHead)
return NULL;
CopyList(pHead);
copyRandomNode(pHead);
return ConnectList(pHead);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: