1. 程式人生 > 其它 >16字串

16字串

技術標籤:Leetcode指標連結串列資料結構

原題連結:複製帶隨機指標的連結串列

題目:給定一個連結串列,每個節點包含一個額外增加的隨機指標,該指標可以指向連結串列中的任何節點或空節點。

要求返回這個連結串列的深拷貝。

我們用一個由n個節點組成的連結串列來表示輸入/輸出中的連結串列。每個節點用一個[val, random_index]表示:

val:一個表示Node.val的整數。
random_index:隨機指標指向的節點索引(範圍從0到n-1);如果不指向任何節點,則為null。

示例1:

輸入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
輸出:[[7,null],[13,0],[11,4],[10,2],[1,0]]

思路:雜湊表。key是舊的節點,value是新的節點,每次操作value都要靠舊節點

C++實現:

/*
// 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) {
        unordered_map<Node*,Node*> mp;
        auto p=head;
        while(p)
        {
            mp[p]=new Node(p->val);
            p=p->next;
        }
        p=head;
        while(p)
        {
            mp[p]->next=mp[p->next];
            p=p->next;
        }
        p=head;
        while(p)
        {
            mp[p]->random=mp[p->random];
            p=p->next;
        }
        return mp[head];
    }
};