复杂链表的复制问题的分析
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);
}
分为三步进行:
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);
}
相关文章推荐
- 链表问题----复杂链表的复制+二叉搜索树与双向链表(Java)
- 链表面试题总结----(可能带环相交问题+复杂链表的复制)
- 单链表中的一些经典问题--约瑟夫环,逆序,查找,复杂链表复制,链表带环问题
- 分解让复杂问题简单化:复杂链表的复制
- 剑指offer面试题26之复杂链表的复制问题
- 链表相交带环问题+复杂链表的复制
- (C++)剑指offer-25:复杂链表的复制(分解让复杂问题简单)(再理解)
- 剑指offer:(26)分解让复杂问题简单化 :复杂链表的复制
- 《剑指offer》刷题笔记(分解让复杂问题简单):复杂链表的复制
- 【剑指offer】4.4分解让复杂问题简单化——面试题26:复杂链表的复制
- ##剑指offer 4.4 分解简化问题1-复杂链表的复制
- 复杂链表的复制(二)
- 牛客网刷题之复杂链表的复制
- 剑指offer——25.复杂链表的复制
- 65. 链表是否带环、环入口、环长度、链表相交问题分析与总结
- 剑指offer面试题26之复杂链表的复制
- 链表问题——复制含有随机指针节点的链表
- 复杂单链表的复制
- 剑指offer26:复杂链表复制
- 复杂链表的复制