[剑指Offer] 25.复杂链表的复制
生活随笔
收集整理的這篇文章主要介紹了
[剑指Offer] 25.复杂链表的复制
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 /*
2 struct RandomListNode {
3 int label;
4 struct RandomListNode *next, *random;
5 RandomListNode(int x) :
6 label(x), next(NULL), random(NULL) {
7 }
8 };
9 */
10 class Solution
11 {
12 public:
13 //在舊鏈表中創(chuàng)建新鏈表,此時不處理新鏈表的兄弟結點
14 void CloneNode(RandomListNode* pHead)
15 {
16 RandomListNode* pNode = pHead;
17 while(pNode != NULL)
18 {
19 RandomListNode* newNode = new RandomListNode(pNode->label);
20 newNode->next = pNode->next;
21
22 pNode->next = newNode;
23 pNode = newNode->next;
24 }
25 }
26 //根據(jù)舊鏈表的random結點,初始化新鏈表的random結點
27 void CloneRandomNode(RandomListNode* pHead)
28 {
29 RandomListNode* pNode = pHead;
30 while(pNode != NULL)
31 {
32 RandomListNode* pNewNode = pNode->next;
33 if(pNode->random != NULL)
34 pNewNode->random = pNode->random->next;
35 pNode = pNewNode->next;
36 }
37 }
38 //從舊鏈表中拆分得到新鏈表
39 RandomListNode* getNewList(RandomListNode* pHead)
40 {
41 RandomListNode* pNode = pHead;
42 RandomListNode* pClonedHead = pHead->next;
43 RandomListNode* pClonedNode = pHead->next;
44
45 pNode->next = pClonedNode->next;
46 pNode = pNode->next;
47
48 //循環(huán)
49 while(pNode!=NULL)
50 {
51 pClonedNode->next = pNode->next;
52 pClonedNode = pClonedNode->next;
53 pNode->next = pClonedNode->next;
54 pNode = pNode->next;
55 }
56 return pClonedHead;
57 }
58 RandomListNode* Clone(RandomListNode* pHead)
59 {
60 if(pHead==NULL) return NULL;
61 CloneNode(pHead);
62 CloneRandomNode(pHead);
63 return getNewList(pHead);
64 }
65 };
?
轉(zhuǎn)載于:https://www.cnblogs.com/lca1826/p/6496690.html
總結
以上是生活随笔為你收集整理的[剑指Offer] 25.复杂链表的复制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。