标签:链表 leetcode 九章算法 lintcode 面试题
http://www.jiuzhang.com/problem/57/
给出一条带随机指针的链表,对其进行深度拷贝(Deep Copy)。
http://www.lintcode.com/zh-cn/problem/copy-list-with-random-pointer/
第一步:使用HashMap,首先复制所有的节点,用HashMap记录老节点A与新节点A‘的映射关系。
第二步:遍历每个点,将Random指针连上。如存在一条Random指针从A指向B,那么在HashMap中找到映射的新节点A‘和B‘,将A‘的Random指针指向B‘。
额外空间复杂度O(n),时间复杂度O(n)
Follow Up 如果不适用额外的辅助存储空间:
第一步:将每个节点复制并插入相邻节点中。如1->2->3->NULL变为:1->1‘->2->2‘->3->3‘->NULL。
第二步:接下来连接Random指针,如果存在一条Random指针从A指向B,那么将A->next的Random指针指向B->next。
第三步:将链表拆开。A=head, A‘=head->next; A->next=A->next->next;A‘->next=A‘->next->next; ...
时间复杂度O(n),额外空间复杂度O(1)
标签:链表 leetcode 九章算法 lintcode 面试题
原文地址:http://blog.csdn.net/jiuzhang_ninechapter/article/details/45681237