复杂链表的复制

来源:互联网 发布:linux自启动脚本rcs 编辑:程序博客网 时间:2024/06/05 09:11

复杂链表不会创建,为了熟悉思想就从书中抠出来一些内容。

题目描述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。



算法思想:

//复杂链表结构struct ComplexListNode{int m_nValue;ComplexListNode* m_pNext;ComplexListNode* m_pSibling;}//1.根据原始链表的每个节点N创建对应的N'void CloneNodes(ComplexListNode* pHead){ComplexListNode* pNode = pHead;ComplexListNode* pCloned = NULL;while(pNode != NULL){ComplexListNode* pNode = new ComplexListNode();pCloned->m_nValue = pNode->m_nValue;pCloned->m_pNext = pNode->m_pNext;pCloned->m_pSibling = NULL;pNode->m_pNext = pCloned;pNode = pCloned->m_pNext;}}//2.设置出来的结点的m_pSiblingvoid ConnectSiblingNodes(ComplexListNode* pHead){ComplexListNode* pNode = pHead;ComplexListNode* pCloned = NULL;while(pNode != NULL){pCloned = pNode->m_pNext;while(pNode->m_pSibling != NULL){pCloned->m_pSibling = pNode->m_pSibling->m_pNext;}pNode = pCloned->m_pNext;}}//3.把长链表分成两个链表ComplexListNode* ReconnectNodes(ComplextListNode* pHead){ComplexListNode* pNode = pHead;ComplexListNode* pClonedHead = NULL;ComplexListNode* pClonedNode = NULL;if(pNode != NULL){pClonedHead = pClonedNode = pNode->m_pNext;pNode->m_pNext = pClonedNode->m_pNext;pNode = pNode->m_pNext;}while(pNode != NULL){pClonedNode->m_pNext = pNode->m_pNext;pClonedNode = pClonedNode->m_pNext;pNode->m_pNext = pClonedNode->m_pNext;pNode = pNode->m_pNext;}return pClonedHead;}//4.把上面3步合起来ComplexListNode* Clone(ComplextListNode* pHead){CloneNodes(pHead);ConnectSiblingNodes(pHead);return ReconnectNodes(pHead);}




0 0
原创粉丝点击