16字串
阿新 • • 發佈:2021-02-04
原題連結:複製帶隨機指標的連結串列
題目:給定一個連結串列,每個節點包含一個額外增加的隨機指標,該指標可以指向連結串列中的任何節點或空節點。
要求返回這個連結串列的深拷貝。
我們用一個由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]; } };