輸入一個復雜鏈表(每個節點中有節點值,以及兩個指針,一個指向下一個節點,另一個特殊指針指向任意一個節點)。
class Solution { public: void CloneList(RandomListNode* pHead){ RandomListNode* cur = pHead; RandomListNode* temp = NULL; while(cur != NULL){ temp = new RandomListNode(0); temp->label = cur->label; temp->next = cur->next; temp->random = NULL; cur->next = temp; cur = temp->next; } } void GetConnection(RandomListNode* pHead){ RandomListNode* cur = pHead; while(cur != NULL){ if(cur->random != NULL){ cur->next->random = cur->random->next; } cur = cur->next->next; } } RandomListNode* pickDump(RandomListNode* pHead) { if(pHead == NULL ) return NULL; RandomListNode* cur = pHead; RandomListNode* cloneHead; cloneHead = pHead->next; RandomListNode* pre = pHead; RandomListNode* clonepre=cloneHead; cur = cloneHead->next; while(cur != NULL){ pre->next = cur; clonepre->next = cur->next; pre = cur; clonepre=clonepre->next; cur = clonepre->next; } pre->next = NULL; clonepre->next =NULL; return cloneHead; } RandomListNode* Clone(RandomListNode* pHead) { if(pHead == NULL) return NULL; RandomListNode* cloneHead=NULL; CloneList(pHead); GetConnection(pHead); cloneHead = pickDump(pHead); return cloneHead; } };
我的問題在於鏈接的結尾沒有結束,雜連在一起了。所以做題要注意細節,包括結尾!!!!!!!!!!!!!!!!!