1. 程式人生 > 實用技巧 >leetcode 13:copy-list-with-random-pointer

leetcode 13:copy-list-with-random-pointer

題目描述

現在有一個這樣的連結串列:連結串列的每一個節點都附加了一個隨機指標,隨機指標可能指向連結串列中的任意一個節點或者指向空。 請對這個連結串列進行深拷貝。 題目分析: 如果要做到深拷貝,分一下三個步驟:1.分別建立新連結串列的節點,插入到舊錶中 2.根據舊錶中的節點複製隨機指標 3.剝離舊錶和新表,返回新表的頭結點。注意指標間的處理即可,屬於常規題 程式碼如下:
 1 RandomListNode *copyRandomList(RandomListNode *head) {
 2         RandomListNode* copy;
 3         RandomListNode* cur;
4 if(!head) 5 return NULL; 6 cur = head; 7 //插入舊錶中 8 while(cur) 9 { 10 copy = new RandomListNode(cur->label); 11 copy->next = cur->next; 12 cur->next = copy; 13 cur = cur->next->next;
14 } 15 //複製隨機指標 16 cur = head; 17 while(cur) 18 { 19 copy = cur->next; 20 copy->random = (cur->random?cur->random->next:NULL); 21 cur = copy->next; 22 } 23 //複製的連結串列從舊錶中剝離 24 cur = head;
25 copy = cur->next; 26 head = copy; 27 while(cur) 28 { 29 cur->next = copy->next; 30 cur = cur->next; 31 copy->next = (cur?cur->next:NULL); 32 copy = copy->next; 33 } 34 return head; 35 }