代码:
//复制复杂链表
struct ComplexListNode
{
int value;
ComplexListNode* pNext;
ComplexListNode* pSibling;
};
//复制链表
void CopyList(ComplexListNode* pComplextListHead)
{
ComplexListNode* pNode = pComplextListHead;
while (pNode != nullptr)
{
ComplexListNode* pCopy = new ComplexListNode();
pCopy = pNode;
pCopy->pNext = pNode->pNext;
pCopy->value = pNode->value;
pCopy->pSibling = nullptr;
pNode->pNext = pCopy;
pNode = pCopy->pNext;
}
}
//连接Sibling
void ConnectSimbling(ComplexListNode* pComplextListHead)
{
ComplexListNode* pNode = pComplextListHead;
while (pNode != nullptr)
{
ComplexListNode* pCopy = pNode->pNext;
if (pNode->pSibling != nullptr)
pCopy->pSibling = pNode->pSibling->pNext;
pNode = pCopy->pNext;
}
}
//拆分链表
ComplexListNode* SplitList(ComplexListNode* pComplextListHead)
{
ComplexListNode* pNode = pComplextListHead;
ComplexListNode* pCopyNode = nullptr;
ComplexListNode* pCopyHead = nullptr;
if (pNode != nullptr) //如果不为空,那么至少有两个结点
{
pCopyHead = pCopyNode = pNode->pNext;
pNode->pNext = pCopyNode->pNext;
pNode = pNode->pNext;
}
while (pNode != nullptr)
{
pCopyNode->pNext = pNode->pNext;
pCopyNode = pCopyNode->pNext;
pNode->pNext = pCopyNode->pNext;
pNode = pNode->pNext;
}
return pCopyHead;
}