天天看点

复杂链表的复制

. 复杂链表的复制

题目介绍:

Node(int _val) {
    val = _val;
    next = NULL;
    random = NULL;
}           
### 题解
1. 这道题是一道 基于深拷贝 思想的链表题,意味着一定要做到深拷贝,将整个资源copy一份
2. 特殊的,处理寻常链表具有的 next的指针, 它还有 一个指向 随机的 random的指针
3. 对于深度拷贝,必然我们要主动  创建每一个节点,才能实现整体的拷贝
4. 因为具有一个随机的指向, 所以, 为了不 多次的创建某一节点, 我们选择使用一个 单次存储的map来管理创建的资源
5. -------------------------分割线------------------------------------------------------------
6. 利用一个map 对需要创建head的拷贝值node时, 进行插入实现管理
7. 如果已经创建过了,就不需要再做处理, 没有创建的话, 进入
8. 创建改节点的拷贝,插入, 然后深度拷贝 它的next 节点和 random节点
9. 因为利用的递归,偏向于深度的一种构建,对于链表来说,就可以说是完成了
10. 返回值是copy的新的头节点, 即map --> key == head;           

继续阅读