复杂链表的克隆

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 }

 

posted on 2013-04-08 16:43  月moon鸟  阅读(190)  评论(0编辑  收藏  举报

导航