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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 138. 复制带随机指针的链表(哈希 / 深拷贝)

發布時間:2024/7/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 138. 复制带随机指针的链表(哈希 / 深拷贝) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

給定一個鏈表,每個節點包含一個額外增加的隨機指針,該指針可以指向鏈表中的任何節點或空節點。

要求返回這個鏈表的深拷貝。

《劍指Offer》同題:面試題35. 復雜鏈表的復制

2. 解題

類似題目:LeetCode 1484. 克隆含隨機指針的二叉樹(哈希/遞歸)

  • 哈希表存儲映射《原節點,新節點》
class Solution { public:Node* copyRandomList(Node* head) {if(head == NULL)return NULL;unordered_map<Node*, Node*> m;//原節點-新節點 哈希表Node *cur = head, *newNode;while(cur != NULL)//先創建新節點,賦值{newNode = new Node(cur->val);m[cur] = newNode;cur = cur->next;}cur = head;while(cur != NULL)//再次遍歷,查表,把新節點指針付進去{m[cur]->next = m[cur->next];m[cur]->random = m[cur->random];cur = cur->next;}return m[head];} };

  • 原地算法,先復制一遍鏈表 a ->a.-> b-> b.-> ...
  • 接好新鏈表random
  • 拆開兩條鏈表
class Solution { public:Node* copyRandomList(Node* head) {if(!head)return NULL;Node* cur = head, *newNode, *H;while(cur)//復制一遍原鏈表 a a` b b`... {newNode = new Node(cur->val);newNode->next = cur->next;cur->next = newNode;cur = newNode->next;}cur = head;newNode = cur->next;while(cur)//把新鏈表的random接好{if(cur->random)newNode->random = cur->random->next;cur = cur->next->next;if(cur)newNode = cur->next;}cur = head;H = newNode = cur->next;while(newNode->next)//兩條鏈表拆開{cur->next = newNode->next;newNode->next = newNode->next->next;cur = cur->next;newNode = newNode->next;}cur->next = NULL;return H;} }; 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的LeetCode 138. 复制带随机指针的链表(哈希 / 深拷贝)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。