复杂链表的复制
来源:互联网 发布:阿里菜鸟网络入职期权 编辑:程序博客网 时间:2024/06/09 17:58
剑指Offer面试题26
题目:
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针 random指向任意一个节点或者NULL),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
分析:
再不用辅助空间的情况下实现O(n)的时间效率。
1、根据原始链表的每个结点N创建对应的N’,把N’链接在N的后面
void CloneNodes(RandomListNode *pHead) { RandomListNode *pNode = pHead; while(pNode != NULL) { RandomListNode *pCloned = new RandomListNode(0); pCloned->label = pNode->label; pCloned->next = pNode->next; pNode->next = pCloned; pNode = pCloned->next; } }
2、 设置复制出来的结点的random。假设原始链表上的N的random指向结点S,那么对应复制出来的N’是N的next指向的结点,同样S’也是S的next指向的结点。
void ConnectRandomNodes(RandomListNode *pHead) { RandomListNode *pNode = pHead; while(pNode != NULL) { RandomListNode *pCloned = pNode->next; if(pNode->random != NULL) { pCloned->random = pNode->random->next; } pNode = pCloned->next; } }
3、把这个链表拆分成两个链表,把奇数位置的结点用next链接起来就是原始 建表,把偶数位置的结点用next链接起来就是复制出来的链表。
RandomListNode *ReconnectNodes(RandomListNode *pHead) { RandomListNode *pNode = pHead; //pNode用来指向长链表的当前指向的结点 RandomListNode *pCloneHead = NULL; RandomListNode *pClonedNode = NULL; //pClonedNode用来指向复制的链表的当前指向的结点 //初始化 if(pNode != NULL) { pCloneHead = 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 pCloneHead; }
main函数:
RandomListNode* Clone(RandomListNode* pHead) { CloneNodes(pHead); ConnectRandomNodes(pHead); return ReconnectNodes(pHead); }
0 0
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- 复制复杂的链表
- 复杂链表的复制
- 复杂链表的复制
- 复杂链表的复制
- clipse代码自动提示设置、如何配置eclipse的代码自动提示功能?
- Construct Binary Tree from Preorder and Inorder Traversal
- 谷哥的小弟学后台(05)——MySQL(5)
- Windows Server 2012安装密钥
- hdu1171【母函数!!!】
- 复杂链表的复制
- Java中concurrent包中线程池的使用
- nginx+keepalive安装部署与主从双机热备+自动切换
- Servlet 工作原理解析
- Nginx配置文件(nginx.conf)配置详解
- 蓝桥杯 2014 4 排列序数
- 创建DISPATCH_SOURCE_TYPE_READ派发源
- 美国行(二):物联网的真实市场到底在哪里?
- bzoj3122(bsgs)