76.复杂链表的复制
来源:互联网 发布:类似知乎的网站源码 编辑:程序博客网 时间:2024/06/15 20:39
题目:有一个复杂链表,其结点除了有一个m_pNext 指针指向下一个结点外,还有一个m_pSibling 指向链表中的任一结点或者NULL。其结点的C++定义如下:
struct ComplexNode {int m_nValue;ComplexNode* m_pNext;ComplexNode* m_pSibling;};下图是一个含有5 个结点的该类型复杂链表。
图中实线箭头表示m_pNext 指针,虚线箭头表示m_pSibling 指针。为简单起见,指向NULL 的指针没有画出。请完成函数ComplexNode*Clone(ComplexNode* pHead),以复制一个复杂链表。
分析:在常见的数据结构上稍加变化,这是一种很新颖的面试题。要在不到一个小时的时间里解决这种类型的题目,我们需要较快的反应能力,对数据结构透彻的理解以及扎实的编程功底。
HANDWRITING:
想着第一次遍历构造链表结构,第二次遍历调整m_pSilbling指针,发现调整m_pSibling指针时查找的复杂度很高,改变思路。
如果将创建的节点紧接着放在原来节点的next,那么查找m_pSibling也只用找原节点m_pSibling的next,有了思路开写。
ComplexNode *Clone(ComplexNode *pHead) {ComplexNode *cur = pHead, *nHead, *ncur;while (cur != 0) {ComplexNode *tmp = new ComplexNode();tmp->m_nValue = cur->m_nValue;tmp->m_pNext = cur->m_pNext;cur->m_pNext = tmp;cur = tmp->m_pNext;}nHead = pHead->m_pNext;cur = pHead, ncur = nHead;while (cur != 0) {ncur->m_pSibling = cur->m_pSibling->m_pNext;cur = ncur->m_pNext;ncur = cur->m_pNext;}cur = pHead, ncur = nHead;while (cur != 0) {cur->m_pNext = cur->m_pNext->m_pNext;ncur->m_pNext = ncur->m_pNext->m_pNext;cur = cur->m_pNext;ncur = ncur->m_pNext;}return nHead;}
吐槽下这编辑器,太烂了
- 76.复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复制复杂的链表
- 复杂链表的复制
- 复杂链表的复制
- postgreSQL安装后的简单测试和使用
- Android面试题
- poj 1716 Integer Intervals (贪心)
- Java中的Externalizable接口
- “Can not load DLL“.\ADTVR_Live.dll”: Can not find the module. (Exception From HRESULT:0x8007007E)。
- 76.复杂链表的复制
- java 并发包
- SOAP 语法
- oracle 11g 基本操作代码
- Centos--yum配置本地数据源
- 韩顺平老师算法连载2(转载)
- 年过半百后,如何才能继续做喜爱的编程工作?
- 将信号用作 Linux 调试工具
- 韩顺平老师算法连载3(转载)