标签:
/* 题目: 复杂链表的复制。 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开始,偶数是院士链表,奇数是克隆链表。 */
标签:
原文地址:http://www.cnblogs.com/hgonlywj/p/4842570.html