首页 > 其他 > 详细

剑指 Offer 35. 复杂链表的复制

时间:2020-11-30 15:27:44      阅读:20      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

主要是对random进行赋值。

1:可以使用map将旧节点和新节点对应起来,然后进行赋值

2:首先对map进行赋值,其次对next和random进行赋值

注意点:第二次循环的时候,将cur赋值为head

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* next;
    Node* random;
    
    Node(int _val) {
        val = _val;
        next = NULL;
        random = NULL;
    }
};
*/
/*
*   思想是,使用哈希表将旧的节点映射到新的节点上,可以使用map
*   如果头结点为空,则直接返回。
*   不为空,先遍历旧的链表,做一一映射
*   再遍历链表,对random进行赋值
*/

class Solution {
public:
    Node* copyRandomList(Node* head) {
        if(head == NULL){
            return NULL;
        }
        Node * cur = head;
        map<Node*,Node*> mp;
        //做一一映射 
        while(cur !=NULL){
            mp[cur] = new Node(cur->val);
            cur = cur->next;
        }
        //对cur要重新赋值,这个地方在第一次提交的时候忘记了
        cur = head;
        //对next 和 random进行赋值
        while(cur !=NULL){
            mp[cur]->next = mp[cur->next];
            mp[cur]->random = mp[cur->random];
            cur = cur->next;
        }
        return mp[head];
    }
};

  

 

剑指 Offer 35. 复杂链表的复制

原文:https://www.cnblogs.com/ejwbytshooting/p/14061049.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!