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

2020-07-30

1.题目描述

请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指
向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。

2.题解

使用map将节点进行一一映射

3.代码

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* next;
    Node* random;
    
    Node(int _val) {
        val = _val;
        next = NULL;
        random = NULL;
    }
};
*/
class Solution {
public:
    Node* copyRandomList(Node* head) {
        if (!head) return NULL;
        unordered_map<Node*,Node*> mymap;
        Node* p=head,*res;
        while (p){
            Node *tmp=new Node(p->val);
            if (p==head) res=tmp;
            mymap[p]=tmp;
            p=p->next;
        }

        unordered_map<Node*,Node*>::iterator it;
	    for(it = mymap.begin(); it != mymap.end(); it++) {
		    if (it->first->next) it->second->next=mymap[it->first->next];
            else it->second->next=NULL;
		    if (it->first->random) it->second->random=mymap[it->first->random];
            else it->second->random=NULL;
	    }

        return res;

    }
};

你可能感兴趣的:(剑指offer,LeetCode-链表)