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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[Leetcode] Copy list with random pointer 对带有任意指针的链表深度拷贝

發布時間:2025/4/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Leetcode] Copy list with random pointer 对带有任意指针的链表深度拷贝 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

Return a deep copy of the list.

深度復制:

僅簡單的遍歷一遍鏈表時,沒法復制random pointer屬性。所以有點懵,大神的做法如下,加入個人理解。

思路:對鏈表進行三次遍歷。

第一次遍歷復制每一個結點,將新結點接在原結點的后面, 讓鏈表變成一個重復鏈表,新舊交替;

第二次遍歷維護新結點的隨機指針,因,新結點是在舊結點之后,所以node->next->random=node->random->next,而node->node結點為新結點,這樣,我們就把新結點的隨機指針接好了;

第三次遍歷,將兩新舊結點分開,因為,構成的重復鏈表是新舊結點交替出現,故,只要每隔一個節點相連即可,就完成了對鏈表的分割。如下圖:

1 /** 2 * Definition for singly-linked list with a random pointer. 3 * struct RandomListNode { 4 * int label; 5 * RandomListNode *next, *random; 6 * RandomListNode(int x) : label(x), next(NULL), random(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 RandomListNode *copyRandomList(RandomListNode *head) 12 { 13 if(head==NULL) return NULL; 14 15 //第一步,在oldNode的后面插入一個新的結點 16 RandomListNode *oldNode=head; 17 while(oldNode !=NULL) 18 { 19 RandomListNode *newNode=new RandomListNode(oldNode->label); 20 newNode->next=oldNode->next; 21 newNode->random=oldNode->random; 22 oldNode->next=newNode; 23 oldNode=newNode->next; //遍歷前行 24 } 25 26 //第二步,關聯random 27 oldNode=head; 28 while(oldNode !=NULL) 29 { 30 if(oldNode->random !=NULL) 31 oldNode->next->random=oldNode->random->next; 32 oldNode=oldNode->next->next; 33 } 34 35 //第三步,分開兩鏈表 36 RandomListNode *newList=new RandomListNode(0); 37 newList->next=head; 38 RandomListNode *pHead=newList; 39 40 oldNode=head; 41 while(oldNode !=NULL) 42 { 43 pHead->next=oldNode->next; 44 oldNode->next=pHead->next->next; 45 46 pHead=pHead->next; 47 oldNode=oldNode->next; 48 } 49 50 return newList->next; 51 } 52 };

?

轉載于:https://www.cnblogs.com/love-yh/p/7009489.html

總結

以上是生活随笔為你收集整理的[Leetcode] Copy list with random pointer 对带有任意指针的链表深度拷贝的全部內容,希望文章能夠幫你解決所遇到的問題。

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