19--复杂链表的复制。

/*

题目:
    复杂链表的复制。
struct ComplexListNode
{
    int m_vlaue;
    ComplexListNode *m_next;
    ComplexListNode *m_pSibling;
};
m_next,连接下一个结点,m_pSibling随便链接结点其他节点。

这样复制结点就有难度,一次遍历明显不可能全部解决。

策略:
    第一种方法:
        先复制一遍链表,让m_pnext把结点连接起来。第二轮在复制另一个指针,复杂度为O(n*n);


    第二种方法:
        先复制一遍链表,然后以空间换时间,用O(n)长的哈希表来存储数据,顺序保存所对应的指针。
        保存m_pSibling指针,然后在循环第二变就可以了。


    第三种:
        不加入辅助空间的算法。
        (1):按顺序将链表一个一个创建,并且连在之前的结点
        例如:开始链表为ABCDEFG,创建之后的事AaBbCcDdEeFfGg.
        (2):这里举例,如果A指向C。那么必然是a指向c。所以,a指向C的下一个。
        遍历以后,指向该结点指向结点的下个结点。
        (3):分离链表,
        其实就是奇偶分析!从0开始,偶数是院士链表,奇数是克隆链表。
*/
原文地址:https://www.cnblogs.com/hgonlywj/p/4842570.html