每天一道LeetCode-----复制一个带有随机节点的链表
生活随笔
收集整理的這篇文章主要介紹了
每天一道LeetCode-----复制一个带有随机节点的链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Copy List with Random Pointer
原題鏈接Copy List with Random Pointer
深拷貝一個鏈表,鏈表節點的成員包括
- 指向下一個節點的指針
- 指向一個隨機節點的指針
- 節點值
主要的影響在隨機節點的拷貝,處理不好會引發遞歸拷貝,解決方法是采用一個map記錄原節點和復制后的節點
代碼如下
/*** Definition for singly-linked list with a random pointer.* struct RandomListNode {* int label;* RandomListNode *next, *random;* RandomListNode(int x) : label(x), next(NULL), random(NULL) {}* };*/ class Solution { public:RandomListNode *copyRandomList(RandomListNode *head) {unordered_map<RandomListNode*, RandomListNode*> hash;return copyList(head, hash);} private:RandomListNode* copyList(RandomListNode* head, unordered_map<RandomListNode*, RandomListNode*>& hash){if(!head)return nullptr;/* 拷貝過,直接返回 */if(hash.find(head) != hash.end())return hash[head];auto node = new RandomListNode(head->label);hash[head] = node;node->next = copyList(head->next, hash);node->random = copyList(head->random, hash);return node;} };總結
以上是生活随笔為你收集整理的每天一道LeetCode-----复制一个带有随机节点的链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每天一道LeetCode-----一个整
- 下一篇: 每天一道LeetCode-----将字符