题目概述
解题思路
1、将复杂链表的每个节点 N 拷贝一份在每个节点 N' 的后方
2、遍历一遍复杂链表,将 N' 的复杂节点 C 指向 N 节点指向的复杂节点的下一个 C->next(注意判断 C 是否为空)
3、遍历一遍复杂链表,将链拆开
代码实现
Node* CopyComplexList(Node*& phead)
{
assert(phead);
//步骤1:拷贝一份节点在每个原来节点的后面
Node* pCur = phead;
Node* tmp = NULL;
while (pCur)
{
tmp = pCur;
pCur = pCur->_next;
Node* newnode = new Node(tmp->_data);
tmp->_next = newnode;
newnode->_next = pCur;
}
//步骤2:遍历一遍,将complex赋值
pCur = phead;
Node* newNode = NULL;
while (pCur)
{
newNode = pCur->_next;
if (pCur->_complex)//小心复杂指针为空的情况
newNode->_complex = pCur->_complex->_next;
pCur = newNode->_next;
}
//步骤3:进行拆分
pCur = phead;
Node* pnewHead = NULL;
if (pCur)
pnewHead = pCur->_next;
Node* pnewCur = pnewHead;
while (pCur)
{
pnewCur = pCur->_next;
pCur->_next = pnewCur->_next;
pCur = pCur->_next;
}
return pnewHead;
}