复杂链表的复制
来源:互联网 发布: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
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复制复杂的链表
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- iTerm2 快捷键大全
- 使用 MyEclipse 10 搭建 SSH2 框架整合开发环境
- 如何计算时间复杂度
- aop的代码原理+理论
- Delphi XE8 安卓摇一摇功能的实现
- 复杂链表的复制
- Maven中的profile标签简介
- Yocto tips : Yocto 如何加快软件包的下载 如何只下载所有需要的软件包而不编译
- Android库Volley的使用介绍
- iOS 简单push和present混用退回根视图方法
- Fragment事务的提交的方式
- Android Binder (0):代码层次
- 要善于利用数组字典
- 10grac ASM磁盘组添加和删除磁盘