复杂链表的复制
来源:互联网 发布:csol2控制台fps优化 编辑:程序博客网 时间:2024/06/03 08:47
题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空指针)
/*struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL), random(NULL) { }};*/class Solution {public: RandomListNode* Clone(RandomListNode* pHead) { //第一步,根据原始链表的每个节点N创立节点N' RandomListNode* pNode=pHead; while(pNode!=NULL) { RandomListNode* pCloned=new RandomListNode(pHead->label); pCloned->label=pNode->label; pCloned->next=pNode->next; pCloned->random=NULL; pNode->next=pCloned; pNode=pCloned->next; } // 第二步,复制节点的多余的指针 pNode=pHead; while(pNode!=NULL) { RandomListNode* pCloned=new RandomListNode(pHead->label); pCloned=pNode->next; if(pNode->random!=NULL) { //假设pNode指向s,则pCloned指向s的下一个节点s' pCloned->random=pNode->random->next; } pNode=pCloned->next; } // //第三步,把长链表拆分成两个链表 pNode=pHead; RandomListNode* pClonedHead=NULL; RandomListNode* pClonedNode=NULL; if(pNode!=NULL) { pClonedHead=pClonedNode=pNode->next; pNode->next=pClonedNode->next; pNode=pNode->next; } while(pNode!=NULL) { pClonedNode->next=pNode->next; pClonedNode=pClonedNode->next; pNode->next=pClonedNode->next; pNode=pNode->next; } return pClonedNode; }};
0 0
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复制复杂的链表
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- Typescript的参数新特性
- 空格替换
- ffmpeg基本用法(转)
- LeetCode-282. Expression Add Operators (JAVA)表达式求值
- 函数传参中使用指针
- 复杂链表的复制
- 机器学习(八):寻找数据的分组——k均值聚类
- Hardcoded string “姓名”, should use @string resource警告
- 【网络爬虫】使用jsoup对dom树解析
- HDOJ 3507 Print Article (斜率优化DP)
- java缓存技术的介绍
- [数据结构]归并排序
- 献给青春的歌 · 致「 腾讯QQ 18 岁」
- HDOJ 1004 Let the Balloon Rise