日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 138 复制带随机指针的链表

發(fā)布時(shí)間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 138 复制带随机指针的链表 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • 題目描述
  • 給定一個(gè)鏈表,每個(gè)節(jié)點(diǎn)包含一個(gè)額外增加的隨機(jī)指針,該指針可以指向鏈表中的任何節(jié)點(diǎn)或空節(jié)點(diǎn)。 要求返回這個(gè)鏈表的 深拷貝。 我們用一個(gè)由 n 個(gè)節(jié)點(diǎn)組成的鏈表來(lái)表示輸入/輸出中的鏈表。每個(gè)節(jié)點(diǎn)用一個(gè) [val, random_index] 表示: val:一個(gè)表示 Node.val 的整數(shù)。 random_index:隨機(jī)指針指向的節(jié)點(diǎn)索引(范圍從 0 到 n-1);如果不指向任何節(jié)點(diǎn),則為 null 。
  • 題解
  • 參考鏈接:https://leetcode-cn.com/problems/copy-list-with-random-pointer/solution/liang-chong-shi-xian-tu-jie-138-fu-zhi-dai-sui-ji-/ 1. 時(shí)間O(N),空間O(N) 2. 時(shí)間O(N),空間O(13. 時(shí)間O(N),空間O(N)
  • 代碼
  • class Solution { public:Node* copyRandomList(Node* head) {if (!head) return NULL;map<Node*,Node*> mymap;Node* p=head;while (p){Node* tmp=new Node(0);mymap[p]=tmp;p=p->next;}for (auto m:mymap){m.second->val=m.first->val;m.second->random=mymap[m.first->random];m.second->next=mymap[m.first->next];}return mymap[head];} }; /* // 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) return NULL;Node* p=head;while (p){Node* tmp=new Node(p->val);tmp->next=p->next;p->next=tmp;p=tmp->next;}p=head;while (p){if (p->random) p->next->random=p->random->next;else p->next->random=NULL;p=p->next->next;}Node* node=new Node(-1),*q=node;p=head;while (p){q->next=p->next;q=q->next;p->next=q->next;p=p->next;}return node->next;} };
  • 說(shuō)明
  • 1. 我們可以使用哈希表,建立鏈表中每個(gè)節(jié)點(diǎn)與深拷貝之后相應(yīng)節(jié)點(diǎn)之間的映射關(guān)系,之后為其賦值,val 的值相等,next的值即為原鏈表next節(jié)點(diǎn)在map中的對(duì)應(yīng)節(jié)點(diǎn),random的值也為原鏈表random節(jié)點(diǎn)在map中 的對(duì)應(yīng)節(jié)點(diǎn)。 2. 我們可以不必使用哈希表來(lái)建立映射關(guān)系,在原鏈表中的每個(gè)節(jié)點(diǎn)后插入和其值相同的節(jié)點(diǎn),這樣相鄰兩個(gè) 節(jié)點(diǎn)就建立了對(duì)應(yīng)關(guān)系,節(jié)點(diǎn)的random值為其原節(jié)點(diǎn)random的next節(jié)點(diǎn),最后再把拷貝之后的鏈表抽出來(lái)即 可。 3. 將其視作圖來(lái)進(jìn)行深度優(yōu)先搜索。

    總結(jié)

    以上是生活随笔為你收集整理的LeetCode 138 复制带随机指针的链表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。