复杂链表的复制
来源:互联网 发布:迅捷路由器主人网络 编辑:程序博客网 时间:2024/05/17 04:13
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。
/*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; RandomListNode *tmp=pHead; //copy the nodes while(tmp) { RandomListNode *tmpNew=new RandomListNode(tmp->label); tmpNew->next=tmp->next; tmp->next=tmpNew; tmp=tmp->next->next; } tmp=pHead; //copy the random while(tmp) { if(tmp->random) tmp->next->random=tmp->random->next; tmp=tmp->next->next; } //split src and dst list RandomListNode *retHead=new RandomListNode(0); RandomListNode *dst=retHead; tmp=pHead; while(tmp) { RandomListNode *m=tmp->next; tmp->next=m->next; tmp=tmp->next; dst->next=m; dst=m; } return retHead->next; }};关于复杂链表的复制分析:
1.节点值复制
2.next指针复制
3.random指针复制
问题的难点在怎么复制random指针?因为random指针是随机指的,所以第一步先不用给random指针赋值,先初始化所有节点的值再说。那么random指针到底怎么赋值?考虑一个原链表,一个复制链表。原链表中的某个节点的随机指针,或者说关系怎样映射到新的复制链表中呢?上述代码采取的处理办法是:复制链表时压根就不新建一个链表,而是这样放
1-1'-2-2'-3-3'
1'、2'、3'为新复制的节点,那么新节点的random指针关系可以由原链表的指针节点关系求得。
tmp->next->random=tmp->random->next;如此,random指针关系复制好了,但是要将原链表和复制链表分开了。
0 0
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复制复杂的链表
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 《C++ primer 4th》习题 7-31 记录
- Linux下正则表达式规范
- imx6 nfs搭建
- SlidingActivity 手势控制Activity切换
- 那些年用node接入微信走过的坑之(二)---微信自定义菜单
- 复杂链表的复制
- 鸡兔同笼
- SuperMap8C基本概念
- Unix系统Shell和简单指令
- 三、数据结构与算法--排序(冒泡排序、选择排序)
- Unity自动打包工具——Mac上打包android
- 获取本机的全部环境属性
- 自定义View----Android UI模板设计
- Mybatis 万能的map来接收值