【Leetcode】Copy List with Random Pointer
2016-01-29 04:26
399 查看
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.
一个比较理想的方式是,我们先处理这个 1 ->2 ->3 ->4,把它变成1
->1' ->2 ->2' ->3 ->3' ->4 ->4'
然后我们再重新赋值random,因为既然已经建立了这个结构,所有赋值都可以在while()中找到
最后我们break这个结构,只保留所有的(n'),也非常简单,只要把tmp.next
= tmp.next.next 就好了。
我分module,而且给出了prinf函数,用于打印出你之前想放进去的node
Return a deep copy of the list.
一个比较理想的方式是,我们先处理这个 1 ->2 ->3 ->4,把它变成1
->1' ->2 ->2' ->3 ->3' ->4 ->4'
然后我们再重新赋值random,因为既然已经建立了这个结构,所有赋值都可以在while()中找到
最后我们break这个结构,只保留所有的(n'),也非常简单,只要把tmp.next
= tmp.next.next 就好了。
我分module,而且给出了prinf函数,用于打印出你之前想放进去的node
package testAndfun; import java.util.HashMap; import testAndfun.RandomListNode; public class copyListRandomPo { // HashMap<RandomListNode, RandomListNode> map = new HashMap<RandomListNode, RandomListNode>(); public static void main(String[] args){ copyListRandomPo cr =new copyListRandomPo(); RandomListNode n1 = new RandomListNode(1); RandomListNode n2 = new RandomListNode(2); RandomListNode n3 = new RandomListNode(3); n1.next = n2; n2.next = n3; n1.random = n2; n3.random = n1; prinf(n1); RandomListNode new1 = cr.copyRandomList(n1); prinf(new1); } private static void prinf(RandomListNode n){ while(n!=null){ if(n.random!=null) System.out.print(n.label+"("+n.random.label+")"+"->"); else System.out.print(n.label+"->"); n = n.next; } System.out.println(); } private void copyNext(RandomListNode head) { while (head != null) { RandomListNode newNode = new RandomListNode(head.label); newNode.random = head.random; newNode.next = head.next; head.next = newNode; head = head.next.next; } } private void copyRandom(RandomListNode head) { while (head != null) { if (head.next.random != null) { head.next.random = head.random.next; } head = head.next.next; } } private RandomListNode splitList(RandomListNode head) { RandomListNode newHead = head.next; while (head != null) { RandomListNode temp = head.next; head.next = temp.next; head = head.next; if (temp.next != null) { temp.next = temp.next.next; } } return newHead; } public RandomListNode copyRandomList(RandomListNode head) { if (head == null) { return null; } copyNext(head); copyRandom(head); return splitList(head); } }
相关文章推荐
- openstack运维实战系列(十八)nova与ceph结合
- CUDA/OpenCL 学习资料
- wget下载网站整个目录
- Linux下磁盘管理
- 最常用的20个监控Linux系统性能的命令行工具
- 2016-1-29 linux基础学习1
- 使用LaTeX beamer文档类时warning: Option ‘pdfauthor’ has already been used
- 查看linux函数栈
- Linux中的两种守护进程stand alone和xinetd
- centos 7安装ifconfig
- Linux命令之cut详解
- Linux下NTP服务器及客户端配置
- 非常适合用于查看linux内核代码的网站
- 开发者必备的网站
- 配置详解之properties与environments(mybatis源码篇)
- 自定义popup写法以及点击backdrop隐藏popup的directive写法
- 架构设计:系统间通信(11)——RPC实例Apache Thrift 上篇
- 架构设计:系统间通信(12)——RPC实例Apache Thrift 中篇
- 架构设计:系统间通信(13)——RPC实例Apache Thrift 下篇(1)
- 架构设计:系统间通信(14)——RPC实例Apache Thrift 下篇(2)