//复杂链表的复制
//链表定义
struct ComplecListNode
{
int m_nValue;
ComplecListNode* m_nNext;
ComplecListNode* m_npSibling;
};
//复制结点
/*
根据原始链表的每个结点N创建对应的N‘。
把N’放到N的后面
*/
void CloneNode(ComplecListNode* pHead)
{
ComplecListNode* pNode = pHead;
while (pNode!=NULL)
{
ComplecListNode* pCloned = new ComplecListNode();
pCloned->m_nValue = pNode->m_nValue;
pCloned->m_npSibling = NULL;
pCloned->m_nNext = pNode->m_nNext;
pNode->m_nNext = pCloned;
pNode = pCloned->m_nNext;
}
}
//设置复制出来的m_npSibling
void ConnectSiblingNodes(ComplecListNode* pHead)
{
ComplecListNode* pNode = pHead;
while (pNode!=NULL)
{
ComplecListNode* pCloned = pNode->m_nNext;
if (pNode->m_npSibling)
pCloned->m_npSibling = pNode->m_npSibling->m_nNext;
pNode = pCloned->m_nNext;
}
}
//把长链表拆分成两个链表
ComplecListNode* ReconnectNode(ComplecListNode* pHead)
{
ComplecListNode* pNode = pHead;
ComplecListNode* cloneHead = NULL;
ComplecListNode* cloneNode = NULL;
if (pNode)
{
cloneHead = cloneNode = pNode->m_nNext;
pNode->m_nNext = cloneNode->m_nNext;
pNode = pNode->m_nNext;
}
while (pNode)
{
cloneNode->m_nNext = pNode->m_nNext;
cloneNode = cloneNode->m_nNext;
pNode->m_nNext = cloneHead->m_nNext;
pNode = pNode->m_nNext;
}
return cloneHead;
}
ComplecListNode* clone(ComplecListNode* pHead)
{
CloneNode(pHead);
ConnectSiblingNodes(pHead);
return ReconnectNode(pHead);
}
负责链表的复制
最新推荐文章于 2024-08-13 04:24:16 发布