复杂链表的复制
2016-06-14 12:18
344 查看
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。
算法:1)复制正常的链表,不考虑随机节点2)将每一个节点和复制的节点对应到hash表中,这样在原链表中节点的随机节点和复制链表节点的随机节点也是对应的。
代码:
算法:1)复制正常的链表,不考虑随机节点2)将每一个节点和复制的节点对应到hash表中,这样在原链表中节点的随机节点和复制链表节点的随机节点也是对应的。
代码:
struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL), random(NULL) { } }; class Solution { public: RandomListNode* Clone(RandomListNode* pHead) { if(pHead == NULL) return NULL; map<RandomListNode*,RandomListNode*>mp; RandomListNode *p = pHead->next; RandomListNode *newhead = new RandomListNode(pHead->label); mp[pHead] = newhead; RandomListNode *pre = newhead; while (p!=NULL){ RandomListNode* newp = new RandomListNode(p->label); mp[p] = newp; pre->next = newp; pre = newp; p = p->next; } p = pHead; RandomListNode *np,*tmp,*newtmp; np = newhead; while (p!=NULL){ tmp = p->random; if(mp.count(tmp)){ newtmp = mp[tmp]; np->random = newtmp; } else{ np->random = NULL; } np = np->next; p = p->next; } return newhead; } };
相关文章推荐
- 平衡二叉树判断
- 二叉树的深度
- 判断一棵树是否为二叉搜索树
- nyoj 31 5个数求最值 【*min_element()与*max_element()的练习使用】
- 二叉树中和为某一值的路径
- 二叉搜索树的后序遍历序列
- 栈的压入、弹出序列
- 顺时针打印矩阵
- 重建二叉树
- Generate Parentheses
- Populating Next Right Pointers in Each Node
- 计算树中值最大路径
- Single Number II
- Best Time to Buy and Sell Stock II
- Unique Binary Search Trees
- Linked List Cycle
- python学习笔记 异步asyncio
- Integer to Roman (罗马数字转换)
- Ubuntu搭建boa服务器
- Single Number III