Leetcode 138. 复制带随机指针的链表 解题思路及C++实现
生活随笔
收集整理的這篇文章主要介紹了
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++实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode 205. 同构字符串
- 下一篇: Leetcode 166. 分数到小数