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. 劍指OFFER上的題,中間 head->random 原來有可能是NULL,所以要添加一個判斷,很坑。
/** * Definition for singly-linked list with a random pointer. * struct RandomListNode { * int label; * RandomListNode *next, *random; * RandomListNode(int x) : label(x), next(NULL), random(NULL) {} * }; */class Solution {public: RandomListNode *copyRandomList(RandomListNode *head) { // Note: The Solution object is instantiated only once and is reused by each test case. if(!head) return NULL; cloneList(head); cloneRandomPtr(head); return removeClone(head); } void cloneList(RandomListNode* head) { while(head) { RandomListNode* toAdd=new RandomListNode(head->label); RandomListNode* pNext=head->next; toAdd->next=pNext; head->next=toAdd; head=pNext; } } void cloneRandomPtr(RandomListNode* head) { while(head) { if(head->random) head->next->random=head->random->next; head=head->next->next; } } RandomListNode* removeClone(RandomListNode* head) { RandomListNode guard(-1); RandomListNode* tail=&guard; while(head) { tail->next=head->next; tail=tail->next; head->next=head->next->next; head=head->next; } return guard.next; }};