题目:

请实现函数ComplexListNode* Clone(ComplexListNode* pHead);复制一个复杂链表。在复杂链表中,每个节点除了有一个m_pNext指针指向下一个节点外,还有一个m_pSibling指向链表中的任意节点或者NULL。节点的C++定义如下:

struct ComplexListNode
{int m_nValue;ComplexListNode* m_pNext;ComplexListNode* m_pSibling;
};

实现代码:

void CloneNodes(ComplexListNode* pHead)
{ComplexListNode* pNode = pHead;while (pNode != nullptr){ComplexListNode* pClone = new ComplexListNode();pClone->m_nValue = pNode->m_nValue;pClone->m_pNext = pNode->m_pNext;pClone->m_pSibling = nullptr;pNode->m_pNext = pClone;pNode = pClone->m_pNext;}
}void ConnectSiblingNodes(ComplexListNode* pHead)
{ComplexListNode* pNode = pHead;while (pNode != nullptr){ComplexListNode* pClone = pNode->m_pNext;if (pNode->m_pSibling != nullptr) pClone->m_pSibling = pNode->m_pSibling->m_pNext;pNode = pClone->m_pNext;}
}ComplexListNode* ReconnectNodes(ComplexListNode* pHead)
{ComplexListNode* pNode = pHead;ComplexListNode* pCloneNode = pNode->m_pNext;ComplexListNode* pCloneHead = pCloneNode; // 克隆链表的头节点pNode->m_pNext = pCloneNode->m_pNext;pNode = pNode->m_pNext;while (pNode != nullptr){pCloneNode->m_pNext = pNode->m_pNext;pCloneNode = pCloneHead->m_pNext;pNode->m_pNext = pCloneNode->m_pNext;pNode = pNode->m_pNext;}return pCloneHead;
}ComplexListNode* Clone(ComplexListNode* pHead)
{if (nullptr == pHead) return nullptr;CloneNodes(pHead);ConnectSiblingNodes(pHead);return ReconnectNodes(pHead);
}

26. 复杂链表的复制相关推荐

  1. 【剑指offer-Java版】26复杂链表的复制

    复杂链表复制: 一种思路是通过哈希表存放sibling的配对信息 – 没看明白 一种思路是直接在原始链表中复制,然后拆分 – 属于时间和空间效率都比较高的方式 分三步,还是比较好懂的 public c ...

  2. 算法题26 复杂链表的复制

    题目 请实现函数 ComplexListNode clone(ComplexListNode head),复制一个复杂链表.在复杂链表中,每个结点除了有一个 next 域指向下一个结点外,还有一个 s ...

  3. 剑指offer面试题[26]-复杂链表的复制

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...

  4. [剑指offer]面试题26:复杂链表的复制

    面试题26:复杂链表的复制 题目:请实现函数ComplexListNodeClone(ComplexListNodepHead),复制一个复杂链表.在复杂链表中,每个结点除了有一个m_pNext指针指 ...

  5. 剑指offer——面试题26:复杂链表的复制

    剑指offer--面试题26:复杂链表的复制 Solution1: 小套路记住就行!!! 根据书上复杂度为O(n)O(n)O(n)的算法写的,此题加深了对于链表指针的理解与应用! /* struct ...

  6. 剑指offer 26:复杂链表的复制

    复杂链表的复制 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数 ...

  7. 剑指offer:面试题35. 复杂链表的复制

    题目:复杂链表的复制 请实现 copyRandomList 函数,复制一个复杂链表.在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 ...

  8. 剑指Offer面试题:24.复杂链表的复制

    一.题目:复杂链表的复制 题目:请实现函数ComplexListNode Clone(ComplexListNode head),复制一个复杂链表.在复杂链表中,每个结点除了有一个Next指针指向下一 ...

  9. python 带随机指针的链表深度复制_LeetCode:复制带随机指针的链表

    请实现 copyRandomList 函数,复制一个复杂链表.在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null. 思路: ...

  10. hashmap 复制_复杂链表的复制

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制链表的head.(注意,输出结果中请不要返回参数中的节点引用,否则判断 ...

最新文章

  1. Linux Crontab 定时任务 命令详解
  2. HDU3657Game(最大流)
  3. Object C学习笔记12-集合
  4. mysql web日志_mysql日志管理
  5. Web自动化测试理论知识
  6. Spring Cloud Sleuth进阶实战
  7. linux用命令行进行无线连接,linux以命令行下配置连接wlan无线网卡
  8. 王思聪欠款1.5亿成被执行人 孙宇晨:我帮你还钱!
  9. JAVA:hotspot 虚拟机的server和client模式
  10. 科软-信息安全实验3-Rootkit劫持系统调用
  11. python写的监视bt.ktxp.com的rss的小脚本 updated
  12. 国家软考--高级系统分析师证书
  13. 顽固文件删除终极武器
  14. Mathematica note
  15. 转载(中文、日文、韩文编码问题)
  16. og聚流行未能链接到服务器,OG 聚流行:建设一个完善的潮流购买平台
  17. 基于LSTM网络的视觉识别研究与实现——详细版
  18. AVL CRUISE硬件在环台架测试
  19. java金蝶云单据查询_凭证查询
  20. 【转】ultraedit 正则表达式

热门文章

  1. Spring MVC--@RequestMapping
  2. [MySql]默认密码的查找与修改
  3. 如何删除DNN网站中管理菜单中的一些项
  4. fixed定位之后,如何让div上下垂直居中
  5. 12.统计 日志 ip
  6. 45.Linux 网络排错
  7. 48. action 与 filter 的执行流程
  8. lazada发货_Lazada发货要求及注意事项
  9. 变频器22b系列说明书_变频器接电位器正确接法
  10. css中的clip:rect() 只能在绝对定位的元素上使用