leetcode138_複製帶隨機指針的鏈表

一. 回溯

1. 當random訪問了一個新的節點,需要創建它, 否則直接返回舊的指針就好.

2. 特別注意,哈希表中傳入的都是指針,所以一定會是Node*類型,而不是Node.

/*
// 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*類型.
    map<Node*, Node*> tmp;
    //這個其實是回溯,函數的作用是返回拷貝的節點,
    //先遞再歸,先next再random.
    Node* copyRandomList(Node* head) {
        //遞歸終止條件.
        if(head==NULL) return NULL;
        if(tmp.count(head)) return tmp[head];
        //新建節點,作爲深拷貝,注意是指針.
        Node* n = new Node(head->val);
        tmp[head] = n;
        n->next = copyRandomList(head->next);
        n->random = copyRandomList(head->random);
        return n;
    } 
};

發佈了95 篇原創文章 · 獲贊 26 · 訪問量 2116
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章