复杂链表的复制
来源:互联网 发布:js字符串去掉换行符 编辑:程序博客网 时间:2024/06/05 11:50
解题思路:
过程分为三步:
首先,遍历链表,复制当前结点currentNode对应的结点cloneCurNode,并将cloneCurNode放置在currentNode的后面,这样就形成一条包含原始链以及复制链的长链。
然后,还需将原始链中指针的方向赋予复制链
最后,将长链拆分,就得到原始链和复制链了。
/*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) return NULL; RandomListNode* pNode = pHead; RandomListNode* nextNode = pNode->next; while(pNode) { RandomListNode* temp = new RandomListNode(pNode->label); pNode->next = temp; temp->next = nextNode; pNode = temp->next; if(pNode) //处理本身链表只有一个结点和遍历到最后一个节点的情况 { nextNode = pNode->next; } } pNode = pHead; //开始处理随机指针 while(pNode) { if(!pNode->random) { pNode->next->random = NULL; } else pNode->next->random = pNode->random->next; pNode = pNode->next->next; } //开始拆分链表 RandomListNode* CloneList = pHead->next; RandomListNode* CloneNode = CloneList; pNode = pHead; while(pNode) { pNode->next = CloneNode->next; pNode = pNode->next; if(pNode) //处理链表只有一个节点和到最后一个节点 { CloneNode->next = pNode->next; CloneNode = CloneNode->next; } } return CloneList; }};
阅读全文
0 0
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复制复杂的链表
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- RuntimeError: maximum recursion depth exceeded while calling a Python object解决办法
- join()方法
- Javascript里有个C:Part 3
- Android往WebView中填写信息
- LeetCode
- 复杂链表的复制
- 廖雪峰Python教程学习笔记4-函数式编程
- 程序员内部培训与个人发展杂谈
- JPA实体类中的注解
- Shell系列—Shell 传递参数
- String 、InputStream、Reader 之间的转换
- 三家人 CSU
- smplayer centos7
- Ethernet Type,IP Head Protocol Number