LeetCode 138. Copy List with Random Pointer
2016-03-23 20:26
281 查看
题目描述:
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
解题思路:
我也不记得这道题在哪里看到过, 基本思路就是在原链表上复制每一个节点, 到原来节点的后面, 然后修复random pointers, 最后再将复制出来的节点, 从原链表中分离出来。
代码如下:
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
解题思路:
我也不记得这道题在哪里看到过, 基本思路就是在原链表上复制每一个节点, 到原来节点的后面, 然后修复random pointers, 最后再将复制出来的节点, 从原链表中分离出来。
代码如下:
class Solution { public: RandomListNode *copyRandomList(RandomListNode *head) { // 为每一个节点做一个备份, 插入原链表 RandomListNode *pcur = head; while (pcur){ RandomListNode * newNode = new RandomListNode(pcur->label); newNode->next = pcur->next; pcur->next = newNode; pcur = pcur->next->next; } // 复制random pointers pcur = head; while (pcur){ RandomListNode * pNext = pcur->next; if (pcur->random) pNext->random = pcur->random->next; pcur = pcur->next->next; } // 分割链表 RandomListNode myhead(0); RandomListNode * pre = &myhead; pcur = head; while (pcur){ RandomListNode * pNext = pcur->next; pcur->next = pNext->next; pcur = pcur->next; pre->next = pNext; pNext->next = nullptr; pre = pre->next; } return myhead.next; } };
相关文章推荐
- U-boot mkimage指定Linux内核地址时的两种方式
- eclipse中tomcat 中server location灰色,如何修改?
- 线段树维护区间和模板(单结点更新)(1166)
- Linux下文件权限(一)用户ID和用户组ID
- Linux检测websphere进程宕机后自动重启脚本
- 一条脚本搞定OpenCV
- linux系统调用
- ARM Linux系统的时钟机制
- ARM Linux 如何--注册和触发--软中断
- Linux与windows中清空文件的方法
- java.lang.UnsupportedClassVersionError: org/apache/cxf/common/injection/NoJSR250 Annotations
- Centos安装成功mysql-5.5.37
- hadoop的wordcount的改动版
- 《Linux内核分析》第五周笔记 扒开系统调用的三层皮(下)
- apache配置防盗链
- linux tar文件解压
- apache配置静态缓存
- 如何编写Linux设备驱动程序
- HA高可用集群(双机热备)
- 在Apache中配置虚拟主机 LAMP