您的位置:首页 > 其它

19--复杂链表的复制。

2015-09-27 19:09 246 查看
/*

题目:
复杂链表的复制。
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开始,偶数是院士链表,奇数是克隆链表。
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: