复杂链表的克隆
map
题目:复杂链表的节点信息,除了next的指向以外,还有sibling的指向。请复制该链表。
思路:
1、可以利用STL中的map容器,存放原始节点和克隆节点的映射关系。这样第二遍遍历原始链表的时候就可以通过该映射关系构建克隆链表的sibling关系。

1 cListNode* ComplexListCopy(cListNode* head) 2 { 3 map<cListNode*, cListNode*> map_ori_clone; 4 cListNode* pNode = head; 5 cListNode* CloneHead = NULL; 6 cListNode* CloneNow = NULL; 7 cListNode* ClonePre = NULL; 8 9 //遍历原始链表,构建克隆链表的前后关系,和原节点到克隆节点的映射关系 10 while (pNode) 11 { 12 CloneNow = CreateNode(pNode->nValue); 13 map_ori_clone.insert(make_pair(pNode, CloneNow)); 14 15 if (CloneHead == NULL) 16 CloneHead = ClonePre = CloneNow; 17 else 18 { 19 ClonePre->pNext = CloneNow; 20 ClonePre = CloneNow; 21 } 22 23 pNode = pNode->pNext; 24 } 25 26 //遍历原始链表,构建克隆链表的sibling关系,利用原节点和克隆节点的映射关系 27 pNode = head; 28 CloneNow = CloneHead; 29 while (pNode) 30 { 31 if (pNode->pSibling) 32 CloneNow->pSibling = map_ori_clone.find(pNode->pSibling)->second; 33 pNode = pNode->pNext; 34 CloneNow = CloneNow->pNext; 35 } 36 37 return CloneHead; 38 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(一):从.NET IoT入
· .NET 开发的分流抢票软件,不做广告、不收集隐私
· ASP.NET Core - 日志记录系统(二)
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 实现windows下简单的自动化窗口管理