26 复杂链表的复制

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的 head。

 

 

C++:

 1 /*
 2 struct RandomListNode {
 3     int label;
 4     struct RandomListNode *next, *random;
 5     RandomListNode(int x) :
 6             label(x), next(NULL), random(NULL) {
 7     }
 8 };
 9 */
10 class Solution {
11 public:
12     RandomListNode* Clone(RandomListNode* pHead)
13     {
14         if (pHead == NULL)
15             return NULL ;
16         // 插入新节点
17         RandomListNode* cur = pHead ;
18         while(cur != NULL){
19             RandomListNode* clone = new RandomListNode(cur->label) ;
20             clone->next = cur->next ;
21             clone->random = NULL ;
22             
23             cur->next = clone ;
24             cur = clone->next ;
25         }
26         
27         // 建立 random 链接
28         cur = pHead ;
29         while(cur != NULL){
30             RandomListNode* clone = cur->next ;
31             if (cur->random != NULL){
32                 clone->random = cur->random->next ;
33             }
34             cur = clone->next ;
35         }
36         
37         // 拆分
38         cur = pHead ;
39         RandomListNode* pCloneHead = pHead->next ;
40         while(cur->next != NULL){
41             RandomListNode* p = cur->next ;
42             cur->next = p->next ;
43             cur = p ;
44         }
45         return pCloneHead ;
46     }
47 };

 

posted @ 2018-05-04 16:06  __Meng  阅读(185)  评论(0编辑  收藏  举报