题目
请实现函数 ComplexListNode* Clone(ComplexListNode* pHead)
,复制一个复杂链表,在复杂链表中,每个结点除了有一个m_pPext
指针指向下一个结点外,还有一个 m_pSibling
指向链表中的任意结点或者 NULL。
结点的 C++ 定义如下:
struct ComplexListNode
{
int m_nValue;
ComplexListNode* m_pNext;
ComplexListNode* m_pSibling;
};
代码
思想和书上差不多,自己写的。
ComplexListNode* Clone(ComplexListNode* pHead)
{
if (pHead == NULL)
return NULL;
ComplexListNode* pNode = pHead;
while (pNode != NULL)
{
ComplexListNode* pTmp = new(ComplexListNode);
pTmp->m_nValue = pNode->m_nValue;
pTmp->m_pNext = pNode->m_pNext;
pTmp->m_pSibling = NULL;
pNode->m_pNext = pTmp;
pNode = pTmp->m_pNext;
}
pNode = pHead;
while (pNode != NULL)
{
ComplexListNode* pTmp = pNode->m_pNext;
if (pNode->m_pSibling != NULL)
pTmp->m_pSibling = pNode->m_pSibling->m_pNext;
pNode = pTmp->m_pNext;
}
ComplexListNode* pResultHead = pHead->m_pNext;
pNode = pHead;
while (pNode->m_pNext != NULL)
{
ComplexListNode* pTmp = pNode->m_pNext;
pNode->m_pNext = pTmp->m_pNext;
pNode = pTmp;
}
return pResultHead;
}