剑指offer第二十五题【复杂链表的复制】c++实现
2015-10-20 12:16
399 查看
复杂链表的复制
参与人数:1297时间限制:1秒空间限制:32768K
通过比例:17.22%
最佳记录:0 ms|8552K(来自 LuLu1990)
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。
将复制后的节点插入在原节点后面
然后就有node->random=old->random->next;
最后再拆分成两个链表
RandomListNode* Clone(RandomListNode* pHead)
{
if(!pHead){
return NULL;
}
RandomListNode *old;
for(old=pHead;old;){
RandomListNode * node=new RandomListNode(old->label);
node->next=old->next;
old->next=node;
old=node->next;
}
for(old=pHead;old;){
RandomListNode * node=old->next;
if(old->random){
node->random=old->random->next;
}
old=node->next;
}
RandomListNode *res =pHead->next;
for(old=pHead;old;){
RandomListNode * node=old->next;
old->next=node->next;
old=old->next;
if(old){
node->next=old->next;
}
}
return res;
}
参与人数:1297时间限制:1秒空间限制:32768K
通过比例:17.22%
最佳记录:0 ms|8552K(来自 LuLu1990)
题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。将复制后的节点插入在原节点后面
然后就有node->random=old->random->next;
最后再拆分成两个链表
RandomListNode* Clone(RandomListNode* pHead)
{
if(!pHead){
return NULL;
}
RandomListNode *old;
for(old=pHead;old;){
RandomListNode * node=new RandomListNode(old->label);
node->next=old->next;
old->next=node;
old=node->next;
}
for(old=pHead;old;){
RandomListNode * node=old->next;
if(old->random){
node->random=old->random->next;
}
old=node->next;
}
RandomListNode *res =pHead->next;
for(old=pHead;old;){
RandomListNode * node=old->next;
old->next=node->next;
old=old->next;
if(old){
node->next=old->next;
}
}
return res;
}
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总