劍指 Offer 35. 複雜連結串列的複製
阿新 • • 發佈:2020-11-30
主要是對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]; } };