标签:
这道题目首先不管random指针,按照next指针把链表元素给复制出来。然后处理random指针,比较容易想到的想法是利用哈希思想(或者等价的map,set等stl容器),但这样的话需要辅助空间。
不需要辅助空间的方法,复制元素的时候把原始链表改成这样就可以了:
然后修改新增元素的random指针,再把这个链表拆开,返回新链表。
1 class Solution { 2 public: 3 RandomListNode* Clone(RandomListNode* pHead) 4 { 5 if(pHead==NULL) 6 return NULL; 7 RandomListNode* root=pHead; 8 while(root) 9 { 10 RandomListNode* p=new RandomListNode(root->label); 11 p->next=root->next; 12 root->next=p; 13 root=p->next; 14 } 15 root=pHead; 16 while(root) 17 { 18 if(root->random!=NULL) 19 root->next->random=root->random->next; 20 root=root->next->next; 21 } 22 RandomListNode* result=pHead->next; 23 RandomListNode* prev=result; 24 root=pHead; 25 while(root->next->next!=NULL) 26 { 27 root->next=prev->next; 28 root=root->next; 29 prev->next=prev->next->next; 30 prev=prev->next; 31 } 32 root->next=NULL; 33 return result; 34 } 35 };
标签:
原文地址:http://www.cnblogs.com/vaecn/p/5335208.html