1. 程式人生 > 實用技巧 >劍指 Offer 35. 複雜連結串列的複製

劍指 Offer 35. 複雜連結串列的複製

主要是對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];
    }
};