剑指offer——复杂链表的复制
来源:互联网 发布:java获取tomcat的端口 编辑:程序博客网 时间:2024/06/06 01:58
1. 题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
2. 题目分析
复制一个新的复杂链表的思路大概可以分为三个步骤:
1) 对当前链表中的每个节点都进行复制,复制节点插入在原节点的后面。即链表(在该例子中没有指出random):
A -> B -> C -> D
变为:
A -> A' -> B -> B' -> C -> C'
2)复制每个节点的random。A’节点的random为A->random->next。
3)截断链表,将原链表和复制链表分开
3. 题目解答——cpp
/*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; doubleandlonger(pHead); linknewpoint(pHead); return(deleteoriginal(pHead)); } // 步骤1,复制链表节点 void doubleandlonger(RandomListNode* pHead){ RandomListNode* clonedouble = pHead; while(clonedouble != NULL){ RandomListNode* midpoint = new RandomListNode(clonedouble->label); midpoint->next = clonedouble->next; clonedouble->next = midpoint; clonedouble = midpoint->next; } } // 步骤2,复制链表中的所有random信息 void linknewpoint(RandomListNode* pHead){ RandomListNode* pNode = pHead; while(pNode != NULL){ RandomListNode* pNodeNext = pNode->next; if(pNode->random){ pNodeNext->random = pNode->random->next; } pNode = pNodeNext->next; } } // 在链表中取出复制链表 RandomListNode* deleteoriginal(RandomListNode* pHead){ RandomListNode* p = pHead; RandomListNode* ans = pHead->next; while(p != NULL){ RandomListNode* q = p->next; p->next = q->next; p = q->next; if (p != NULL) q->next = p->next; } return ans; }};
阅读全文
0 0
- 《剑指offer》——复杂链表的复制
- 剑指offer——复杂链表的复制
- 复杂链表的复制——剑指offer
- 剑指offer——复杂链表的复制_
- 剑指offer——复杂链表的复制
- 剑指offer——25.复杂链表的复制
- 剑指Offer—25—复杂链表的复制
- 剑指offer—复杂链表的复制
- 剑指offer(25)—复杂链表的复制
- 剑指offer—复杂链表的复制
- 【剑指offer】复杂链表的复制
- 剑指offer--复杂链表的复制
- 《剑指offer》复杂链表的复制
- 剑指offer:复杂链表的复制
- 剑指offer - 复杂链表的复制
- 剑指Offer--复杂链表的复制
- 剑指offer:复杂链表的复制
- 【剑指offer】复杂链表的复制
- Laravel中缓存的使用
- NUnits 配置问题
- 新的学期新的开始~
- 把文件中的一组整数排序后输出到另一个文件中(c/c++)
- oracle的远程连接
- 剑指offer——复杂链表的复制
- Laravel 校验规则之字段值唯一性校验
- Laravel中错误页面的显示
- 数据部分
- 四、高并发秒杀API之Web层设计与实现
- ios-发生请求的两种方式和缓存策略
- 手把手学习Mybatis
- windows安装TensorFlow gpu版本时候的bug;No module named "_pywrap_tensorflow" ;DLL load failed.
- Spring入门