剑指offer26 复杂链表的复制
2016-05-25 10:49
411 查看
/* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL), random(NULL) { } }; */ class Solution { public: RandomListNode* Duplicate(RandomListNode* pHead) { RandomListNode* p=pHead; while(p) { RandomListNode* temp=(RandomListNode*)malloc(sizeof(RandomListNode)); temp->label=p->label; temp->next=p->next; p->next=temp; p=temp->next; } return pHead; } RandomListNode* RandomList(RandomListNode* pHead) { RandomListNode* p=pHead; RandomListNode* pnext=NULL; while(p) { pnext=p->next; if(p->random) { pnext->random=p->random->next; } p=pnext->next; } return pHead; } RandomListNode* split(RandomListNode* pHead) { RandomListNode* result=pHead->next; RandomListNode* p=pHead; RandomListNode* p1=result; while(p) { p->next=p1->next; p=p->next; if(p) { p1->next=p->next; p1=p1->next; } } return result; } RandomListNode* Clone(RandomListNode* pHead) { if(!pHead) return NULL; RandomListNode* p1=Duplicate(pHead); RandomListNode* p2=RandomList(p1); RandomListNode* result=split(p2); return result; } };
要注意各种指针为空的边界条件。在split函数中,必须一趟完成两个链表的拆分,不然就会出现超时错误。
相关文章推荐
- jQuery中的data方法只能获取不能设置值?
- Annotation注解与butterknife
- JavaScript输入输出
- 剑指offer16--二叉树的镜像处理
- js数组对象--数据格式的转换(字符串,对象的取值与赋值)
- CKEDITOR富文本编辑器+AJAX+JQUERY+ListView综合应用
- jquery的printArea打印功能
- javascript之JSON小案例,实现添加数据与清楚数据
- javascript之JSON小案例,实现添加数据与清楚数据
- Strophe.js连接XMPP服务器Openfire、Tigase实现Web私聊、群聊(MUC)
- StringBuffer
- 用JS动态改变表单form里的action值属性的两种方法
- 整理node中的变量
- openfire系列----简单的js im聊天实现
- JQuery each的几种用法
- jsp页面路径问题
- jsp post 乱码 解决方法
- pyc php js echarts css 数据挖掘感悟 2016.05.24回顾
- css3设置高斯模糊
- js打开新窗口被浏览器拦截的解决方法