标签: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 };
标签:style blog color io div log sp on c
原文地址:http://www.cnblogs.com/ZhangYushuang/p/3950420.html