Copy List with Random Pointer
2014-03-26 19:23
288 查看
题目原型:
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指针,这个指针可以指向链表中任何一个元素或者指向NULL。初一看,我们最容易想到那种时间复杂度为O(n2)的做法,但是在OJ上被N/A了。换一种思路,借助map,我们可以把时间复杂度降为O(n)。
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指针,这个指针可以指向链表中任何一个元素或者指向NULL。初一看,我们最容易想到那种时间复杂度为O(n2)的做法,但是在OJ上被N/A了。换一种思路,借助map,我们可以把时间复杂度降为O(n)。
public RandomListNode copyRandomList(RandomListNode head) { if(head==null) return head; RandomListNode newHead = null; //复制不带random指针的链表和新节点与原节点的联系,利用map存储联系 RandomListNode p = head; RandomListNode newNode; RandomListNode q = null; Map<RandomListNode, RandomListNode> map = new HashMap<RandomListNode, RandomListNode>(); while(p!=null) { newNode = new RandomListNode(p.label); newNode.random = null; newNode.next = null; map.put(p, newNode); if(p==head) { newHead = newNode; q = newHead; p = p.next; continue; } q.next = newNode; q = newNode; p = p.next; } //根据关系寻找random指针 p = head; q = newHead; while(p!=null) { if(p.random!=null) { q.random = map.get(p.random); } p = p.next; q = q.next; } return newHead; }
相关文章推荐
- 编译安装Apache出现无法启动服务问题
- linux 64位系统下so编译
- linux内核启动过程分析之内核启动——阶段1
- apache 配置参考手册
- Linux内核设计与实现(8)---中断和中断处理
- 【python】optparse 模块
- 【python】optparse 模块
- linux学习笔记
- Linux 安装FFmpeg
- 使用openoffice转换ms_office to pdf
- jni在linux C中创建java虚拟机
- ecshop上传产品图片不显示的解决办法
- Day3 - bind 显示或设置按键的组合
- Tomcat 6.x 生成CSR
- linux下查看静态库和动态库是32位还是64位
- Nginx配置文件详细说明
- 嵌入式Linux下Camera编程--V4L2 (V4L2内核驱动配置、USB转串配置)
- Linux之防火墙篇一
- linux下安装QQ
- squid 缓存服务器详解