標籤:style blog color io div log sp on c
這個題目是深度複製鏈表,就是所有節點都是新分配的空間,這一點不難做到,難的是新鏈表random指標的賦值,想想也沒什麼好辦法,就用map儲存兩個鏈表的映射關係,在第一次遍曆時只建立節點,建立鏈表,令新鏈表中節點的random值等於舊鏈表的值。第二次遍曆再根據map一一映射。
1 class Solution { 2 public: 3 RandomListNode *copyRandomList(RandomListNode *head) { 4 if(head == NULL) 5 return NULL; 6 RandomListNode* nHead = new RandomListNode(head->label); 7 RandomListNode* optr; 8 RandomListNode* nptr; 9 optr = head;10 nptr = nHead;11 map<RandomListNode*,RandomListNode*> m1;12 m1[optr] = nptr;13 nptr->random = optr->random;14 optr = optr->next;15 while(optr != NULL)16 {17 RandomListNode* tmp = new RandomListNode(optr->label);18 nptr->next = tmp;19 nptr = tmp;20 nptr->random = optr->random;21 m1[optr]=nptr;22 optr = optr->next;23 24 }25 nptr->next = NULL;26 nptr = nHead;27 while(nptr != NULL)28 {29 if(nptr->random != NULL)30 {31 nptr->random = m1[nptr->random];32 }33 nptr = nptr->next;34 }35 return nHead;36 }37 };
Copy List with Random Pointer