100-76

76.复杂链表的复制(链表、算法)

题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,
还有一个m_pSibling指向链表中的任一结点或者NULL。其结点的C++定义如下:
 struct ComplexNode
{
    int m_nValue;
    ComplexNode* m_pNext;
    ComplexNode* m_pSibling;
};

下图是一个含有5个结点的该类型复杂链表。
图中实线箭头表示m_pNext指针,虚线箭头表示m_pSibling指针。为简单起见,
指向NULL的指针没有画出。

100-76                                 
请完成函数ComplexNode* Clone(ComplexNode* pHead),以复制一个复杂链表。 
分析:在常见的数据结构上稍加变化,这是一种很新颖的面试题。
要在不到一个小时的时间里解决这种类型的题目,我们需要较快的反应能力,
对数据结构透彻的理解以及扎实的编程功底。

思路:

我自己想到的最简单的方法就是:首先用pNext指针,将原链表中所有的节点先复制好。然后再修复其他的指针就可以了。这样做的时间复杂度为O(n2)。

比较牛的方法见http://zhedahht.blog.163.com/blog/static/254111742010819104710337/

你可能感兴趣的:(100-76)