博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode – Copy List with Random Pointer
阅读量:5871 次
发布时间:2019-06-19

本文共 2262 字,大约阅读时间需要 7 分钟。

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  * Definition for singly-linked list with a random pointer. 3  * class RandomListNode { 4  *     int label; 5  *     RandomListNode next, random; 6  *     RandomListNode(int x) { this.label = x; } 7  * }; 8  */ 9 public class Solution {10     public RandomListNode copyRandomList(RandomListNode head) {11         if(head==null)12             return null;13         RandomListNode p=head; //拷贝当前节点,并将其插入到被拷贝节点的后方14         while(p!=null){15             RandomListNode temp=new RandomListNode(p.label);16             temp.next=p.next;17             p.next=temp;18             p=temp.next;19         }20         p=head; //将拷贝节点的随机指针指向应有位置21         while(p!=null){22             if(p.random!=null){23                 p.next.random=p.random.next;24             }25             p=p.next.next;26         }27         RandomListNode newhead=head.next;28         p=head; //将拷贝链表与原链表分离29         while(p!=null){30             RandomListNode temp=p.next;31             p.next=temp.next;32             if(temp.next!=null)33                 temp.next=temp.next.next;34             p=p.next;35         }36         return newhead;37     }38 }

最后分离也可这样写:

1 while(p != null && p.next != null){2     RandomListNode temp = p.next;3     p.next = temp.next;4     p = temp;5 }

解法2:

可以用hashmap的方式

1 public RandomListNode copyRandomList(RandomListNode head) { 2     if (head == null) 3         return null; 4     HashMap
map = new HashMap
(); 5 RandomListNode newHead = new RandomListNode(head.label); 6 7 RandomListNode p = head; 8 RandomListNode q = newHead; 9 map.put(head, newHead);10 11 p = p.next;12 while (p != null) {13 RandomListNode temp = new RandomListNode(p.label);14 map.put(p, temp);15 q.next = temp;16 q = temp;17 p = p.next;18 }19 20 p = head;21 q = newHead;22 while (p != null) {23 if (p.random != null)24 q.random = map.get(p.random);25 else26 q.random = null;27 28 p = p.next;29 q = q.next;30 }31 32 return newHead;33 }

 

转载地址:http://mfxnx.baihongyu.com/

你可能感兴趣的文章
数字识别之图像转为二进制数据
查看>>
【319天】每日项目总结系列057(2017.12.21)
查看>>
案例学习总结:原生JS实现表格排序
查看>>
基于vue项目的知识总结
查看>>
【React系列】Props 验证
查看>>
[前中后序遍历] 已知其中两个, 重建树
查看>>
重新定义BFC
查看>>
浏览器缓存控制
查看>>
echarts 配置
查看>>
重拾后端之Spring Boot(一):REST API的搭建可以这样简单
查看>>
ThinkPHP空操作、空控制器处理
查看>>
laravel 填充数据前用truncate清空有外键的表时报错
查看>>
Ruby开发者已可通过Fog管理Microsoft Azure服务
查看>>
FB正在大规模重构React Native,预计今年发布
查看>>
一位83岁独立开发者教会我的道理
查看>>
JavaScript对象:我们真的需要模拟类吗?
查看>>
访谈《敏捷和精益项目集管理》的作者Johanna Rothman
查看>>
Mozilla发布Servo浏览器每日构建版
查看>>
sass从安装到放弃
查看>>
微店大数据开发平台架构演进
查看>>