leetcode之有随机指针的链表深拷贝
来源:互联网 发布:es6 class 知乎 编辑:程序博客网 时间:2024/05/21 19:48
题目:
Copy List with Random Pointer
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
思路:如果没有random pointer那是极容易的,顺着链表走读一遍 ,逐个拷贝节点并链接即可,有了random pointer后,其实也就是加上了记录random pointer的关系而已,考虑到random pointer可以往前指,也可以往后指,则必须全部遍历完才能完整地建立起random pointer对应关系表,记录对应关系,当然用map的数据结构啦,c++不太熟,查了下文档也不难写这么个基本的数据结构,用两个map,一个保存原始链表的random指向,另一个记录原始链表和新建链表按照节点顺序建立的对应关系,这样在走读完原始链表所有节点后,再刷一遍两个map就可以恢复新建链表中与原始链表random指向对应的random 指针了,为了省空间,当然map的元素都用int*表示
代码:
/** * Definition for singly-linked list with a random pointer. * struct RandomListNode { * int label; * RandomListNode *next, *random; * RandomListNode(int x) : label(x), next(NULL), random(NULL) {} * }; */class Solution {public: RandomListNode *copyRandomList(RandomListNode *head) { if(head==NULL) { return NULL; } std::map<RandomListNode*, RandomListNode*> parall; std::map<RandomListNode*, RandomListNode*> randpoint; RandomListNode * pleft=head; RandomListNode * copyList=new RandomListNode(pleft->label); RandomListNode * pright=copyList; parall.insert(std::pair<RandomListNode*,RandomListNode*>(pleft,pright)); randpoint.insert(std::pair<RandomListNode*,RandomListNode*>(pleft,pleft->random)); pleft=pleft->next; while(pleft!=NULL) { //create corresponding node RandomListNode* tmpRight=new RandomListNode(pleft->label); pright->next=tmpRight; pright=pright->next; parall.insert(std::pair<RandomListNode*,RandomListNode*>(pleft,pright)); randpoint.insert(std::pair<RandomListNode*,RandomListNode*>(pleft,pleft->random)); pleft=pleft->next; } for( std::map<RandomListNode*, RandomListNode*>::iterator ii=randpoint.begin(); ii!=randpoint.end(); ++ii) { if((*ii).second!=NULL) { parall[(*ii).first]->random=parall[(*ii).second]; } } return copyList; }};
0 0
- leetcode之有随机指针的链表深拷贝
- leetcode链表拷贝之随机指针
- 【LeetCode-面试算法经典-Java实现】【138-Copy List with Random Pointer(拷贝有随机指针的单链表)】
- 带有随机指针的链表拷贝
- Copy List with Random Pointer 复制有随机指针的链表@LeetCode
- LeetCode 138. Copy List with Random Pointer(拷贝随机指针)
- LeetCode OJ 之 Copy List with Random Pointer(复制含有随机指针的链表)
- 【LeetCode-面试算法经典-Java实现】【143-Copy List with Random Pointer(有随机指针的链表复制)】
- 关于对有一级指针,二级指针的初始化及其浅拷贝和深拷贝
- 附有随机结点指针的链表的深度拷贝 Copy List with Random Pointer
- Copy List with Random Pointer 带随机指针的链表的拷贝
- 九章算法面试题57 拷贝带随机指针的链表结构
- LeetCode之复制有random指针的链表Copy List with Random Pointer
- 随机指针链表深复制
- 从汇编的眼光看C++(之指针拷贝)
- 从汇编的眼光看C++(之指针拷贝)
- 从汇编的眼光看C++(之指针拷贝)
- 克隆一个有随机指针的二叉树 Clone a Binary Tree with Random Pointers
- 菲尔普斯女友是双性人 飞鱼王子陌陌约炮42岁巨乳大妈
- 如果有人问起,就说忘了。
- 重载,覆盖和隐藏区别
- 在JS中操作JSON数据
- Android的遮罩层(蒙板)效果 setXfermode
- leetcode之有随机指针的链表深拷贝
- 100条修身养性的句子
- 百度sdk定位不成功,关闭定位
- OK6410挂载nfs文件系统
- 《常见Android面试题汇总及详细解答》-------- 持续更新中
- 有些句子,比人还美!真的
- fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- android:scaleType 布局文件加载图片时候的显示方式
- 相关备忘