算法题35 复杂链表的复制

 

题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,

还有一个m_pSibling指向链表中的任一结点或者NULL。其结点的C++定义如下:
 struct ComplexNode
{
    int m_nValue;
    ComplexNode* m_pNext;
    ComplexNode* m_pSibling;
};                              

请完成函数ComplexNode* Clone(ComplexNode* pHead),以复制一个复杂链表。 

 

解题思路:建立一个新旧节点指针的表,如map<旧指针,旧指针对应新指针>,在拷贝时,如果旧指针不在map中,new一个并存入map,否则仅拷贝指针。

 

struct ComplexNode { int m_nValue; ComplexNode* m_pNext; ComplexNode* m_pSibling; }; ComplexNode* Clone(ComplexNode* pHead) { static std::map<ComplexNode*, ComplexNode*> nodeMap; if(pHead == NULL) return NULL; ComplexNode* pCopy = NULL; if(nodeMap.find(pHead) == nodeMap.end()) { pCopy = new ComplexNode(); pCopy->m_nValue = pHead->m_nValue; nodeMap[pHead] = pCopy; pCopy->m_pNext = Clone(pHead->m_pNext); pCopy->m_pSibling = Clone(pHead->m_pSibling); } else { pCopy = nodeMap[pHead]; } return pCopy; }

你可能感兴趣的:(算法题35 复杂链表的复制)