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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Leetcode 138. 复制带随机指针的链表 解题思路及C++实现

發布時間:2025/4/16 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode 138. 复制带随机指针的链表 解题思路及C++实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

解題思路:

主要包括三步。

第一步是遍歷一次鏈表,復制其每一個節點,并將所復制的節點接在其后。

第二步是遍歷一次鏈表,解決拷貝節點的random指針的指向。

第三步是從這個大鏈表中,拆出原有鏈表和拷貝鏈表。

具體圖解,課參考LeetCode官方圖解。

?

/* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node() {}Node(int _val, Node* _next, Node* _random) {val = _val;next = _next;random = _random;} }; */ class Solution { public:Node* copyRandomList(Node* head) {if(!head) return head;Node* tmp = head;//遍歷鏈表,復制每一個節點,并將其放在所復制節點之后while(tmp){Node* hh = new Node(tmp->val);hh->next = tmp->next;tmp->next = hh;tmp = hh->next;}tmp = head;//遍歷鏈表,使得復制的節點的random指針指向正確的節點while(tmp){if(tmp->random == NULL) tmp->next->random = NULL;else tmp->next->random = tmp->random->next;if(tmp->next)tmp = tmp->next->next;else tmp = NULL;}Node* res = head->next;// tmp 記錄原始的鏈表節點,tmp2記錄新復制的鏈表節點tmp = head; Node* tmp2 = head;while(tmp){tmp2 = tmp->next;tmp->next = tmp2->next;tmp = tmp->next;if(tmp) tmp2->next = tmp->next;else tmp2->next = NULL;}return res;} };

?

?

?

總結

以上是生活随笔為你收集整理的Leetcode 138. 复制带随机指针的链表 解题思路及C++实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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