剑指offer 复杂链表的复制
来源:互联网 发布:网络优化教程 编辑:程序博客网 时间:2024/06/05 04:40
题目:
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
这题最开始没读懂什么意思,后来是看别人的题解解决的,题目其实就是字面意思,就是将这个带有random指针的链表复制一下,然后得到新链表的表头head。
思路:首先将链表复制一遍,将每个复制的节点紧跟着原节点。如下所示:
然后就是对random指针的设置,
其实我们可以发现A->next->random=A'->random=A->random->next,
那么最后就得到了复制链表,只不过最后复合在一起,将其抽离出来即可。抽离的时候要注意一个细节,那就是pNode指针一定要在pcloneNode节点的前方,不然可能指到空指针。代码:
/*struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL), random(NULL) { }};*/class Solution {public: void CloneListNode(RandomListNode* pHead) { RandomListNode* p = pHead; while(p) { RandomListNode* pNode = new RandomListNode(0); pNode->label = p->label; pNode->next = p->next; p->next = pNode; p = pNode->next; } } /*A->A'->B->B'->C->C'*/ void CloneRandomNode(RandomListNode* pHead) { RandomListNode* p = pHead; while(p) { RandomListNode* pClone = p->next; if(p->random) pClone->random = p->random->next; p = pClone->next; } } RandomListNode* Split(RandomListNode* pHead) { RandomListNode* pNode = pHead; RandomListNode* pCloneHead = pNode->next; RandomListNode* pCloneNode = pCloneHead; pNode->next = pCloneNode->next; pNode = pCloneNode->next; while(pNode) { pCloneNode->next = pNode->next; pCloneNode = pNode->next; pNode->next = pCloneNode->next; pNode = pNode->next; } return pCloneHead; } RandomListNode* Clone(RandomListNode* pHead) { if(!pHead) return NULL; CloneListNode(pHead); CloneRandomNode(pHead); return Split(pHead); }};
阅读全文
0 0
- 【剑指offer】复杂链表的复制
- 剑指offer--复杂链表的复制
- 《剑指offer》复杂链表的复制
- 剑指offer:复杂链表的复制
- 剑指offer - 复杂链表的复制
- 剑指Offer--复杂链表的复制
- 剑指offer:复杂链表的复制
- 【剑指offer】复杂链表的复制
- 剑指offer-复杂链表的复制
- 剑指offer:复杂链表的复制
- 剑指offer:复杂链表的复制
- [剑指offer]复杂链表的复制
- 【剑指offer】复杂链表的复制
- 剑指offer|复杂链表的复制
- 《剑指offer》复杂链表的复制
- 剑指Offer:复杂链表的复制
- 剑指offer 复杂链表的复制
- 剑指offer-复杂链表的复制
- MVP请求
- Python 把序列转换为元组的函数tuple
- STM32F407VE单片机使用I2C接口操作内部控制芯片为RA8816的FYD12864-1001A型的12864液晶
- ACM训练周末总结—11月5日
- React native刷新,类似android的广播
- 剑指offer 复杂链表的复制
- 【数据库事务】--事务传播子方法事务失效(老张)
- Jstorm 反压(Backpressure)
- 加载图片和文字
- python爬虫案例——新浪腾讯股票数据采集
- iOS推送javaPNS源码解析一,设备类
- 响应式开发
- 在windows系统中安装Sulley
- MVP其中有接口(x.http网络请求)