map
题目:复杂链表的节点信息,除了next的指向以外,还有sibling的指向。请复制该链表。
思路:
1、可以利用STL中的map容器,存放原始节点和克隆节点的映射关系。这样第二遍遍历原始链表的时候就可以通过该映射关系构建克隆链表的sibling关系。
ComplexListCopy
1 cListNode* ComplexListCopy(cListNode* head) 2 { 3 map<cListNode*, cListNode*> map_ori_clone; 4 cListNode* pNode = head; 5 cListNode* CloneHead = NULL; 6 cListNode* CloneNow = NULL; 7 cListNode* ClonePre = NULL; 8 9 //遍历原始链表,构建克隆链表的前后关系,和原节点到克隆节点的映射关系 10 while (pNode) 11 { 12 CloneNow = CreateNode(pNode->nValue); 13 map_ori_clone.insert(make_pair(pNode, CloneNow)); 14 15 if (CloneHead == NULL) 16 CloneHead = ClonePre = CloneNow; 17 else 18 { 19 ClonePre->pNext = CloneNow; 20 ClonePre = CloneNow; 21 } 22 23 pNode = pNode->pNext; 24 } 25 26 //遍历原始链表,构建克隆链表的sibling关系,利用原节点和克隆节点的映射关系 27 pNode = head; 28 CloneNow = CloneHead; 29 while (pNode) 30 { 31 if (pNode->pSibling) 32 CloneNow->pSibling = map_ori_clone.find(pNode->pSibling)->second; 33 pNode = pNode->pNext; 34 CloneNow = CloneNow->pNext; 35 } 36 37 return CloneHead; 38 }
声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。