LeetCode 138 复制带随机指针的链表-中等
給你一個長度為 n 的鏈表,每個節點包含一個額外增加的隨機指針 random ,該指針可以指向鏈表中的任何節點或空節點。
構造這個鏈表的 深拷貝。 深拷貝應該正好由 n 個 全新 節點組成,其中每個新節點的值都設為其對應的原節點的值。新節點的 next 指針和 random 指針也都應指向復制鏈表中的新節點,并使原鏈表和復制鏈表中的這些指針能夠表示相同的鏈表狀態。復制鏈表中的指針都不應指向原鏈表中的節點 。
例如,如果原鏈表中有 X 和 Y 兩個節點,其中 X.random --> Y 。那么在復制鏈表中對應的兩個節點 x 和 y ,同樣有 x.random --> y 。
返回復制鏈表的頭節點。
用一個由 n 個節點組成的鏈表來表示輸入/輸出中的鏈表。每個節點用一個 [val, random_index] 表示:
val:一個表示 Node.val 的整數。 random_index:隨機指針指向的節點索引(范圍從 0 到 n-1);如果不指向任何節點,則為 null 。你的代碼 只 接受原鏈表的頭節點 head 作為傳入參數。
輸入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
輸出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
輸入:head = [[1,1],[2,1]]
輸出:[[1,1],[2,1]]
輸入:head = [[3,null],[3,0],[3,null]]
輸出:[[3,null],[3,0],[3,null]]
示例 4:
輸入:head = []
輸出:[]
解釋:給定的鏈表為空(空指針),因此返回 null。
提示:
0 <= n <= 1000 -10000 <= Node.val <= 10000 Node.random 為空(null)或指向鏈表中的節點。代碼如下:
/* // 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) {if(head==nullptr){return nullptr;}unordered_map<Node*,Node*>map;Node *newhead = new Node (head->val);map[head] = newhead;Node *pre = newhead;for (auto it = head->next;it!=nullptr;it = it->next){Node *cur = new Node(it->val);map[it] = cur;pre->next = cur;pre = cur;}for (auto it = head;it!=nullptr;it = it->next){map[it]->random = map[it->random];}return newhead;} };總結
以上是生活随笔為你收集整理的LeetCode 138 复制带随机指针的链表-中等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软宣布OpenAI前CEO等将加入公司
- 下一篇: LeetCode 82 删除排序链表中的