LeetCode_138. Copy List with Random Pointer

題目描述:
在這裏插入圖片描述
思路:設置一個map,用來存放舊鏈表節點和新鏈表節點,(key,value)->(舊鏈表節點,新鏈表節點)
注意:這道題不要被他給的樣例所迷惑,對應的下標random_index根本沒用,就按照正常思路求解即可

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* next;
    Node* random;

    Node() {}

    Node(int _val, Node* _next, Node* _random) {
        val = _val;
        next = _next;
        random = _random;
    }
};
*/
class Solution {
public:
    Node* copyRandomList(Node* head) {
        if(head==NULL)
            return NULL;
        map<Node*,Node*> hash;
        Node* point=head;
        Node* res=NULL;
        Node* q=NULL;
        while(point){
            Node* q1=new Node(point->val,NULL,NULL);
            hash.insert(pair<Node*,Node*>(point,q1));
            if(res==NULL){
                res=q=q1;
            }  
            q->next=q1;
            q=q1;
            point=point->next;
        }
        point=head;
        q=res;
        while(point){
            if(point->next==NULL)
                q->next=NULL;
            else{
                q->next=hash[point->next];
            }
            if(point->random==NULL)
                q->random=NULL;
            else{
                q->random=hash[point->random];
            }   
            point=point->next;
            q=q->next;
        }
        return res;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章