LC138. Copy List with Random Pointer
来源:互联网 发布:2016中国对外投资数据 编辑:程序博客网 时间:2024/06/18 02:29
实现中遇到的问题:
1.StackOverflowError
代码如下
class RandomListNode { int label; RandomListNode next, random; RandomListNode(int x) { this.label = x; } }; public RandomListNode copyRandomList(RandomListNode head) { if(head==null) return null; HashMap<Integer,RandomListNode> map = new HashMap<Integer,RandomListNode>(); searchNodes(map,head); return map.get(head.label); } public RandomListNode searchNodes(HashMap<Integer,RandomListNode> map, RandomListNode oldNode){ if(map.containsKey(oldNode.label)) return map.get(oldNode.label); else{ RandomListNode newNode = new RandomListNode(oldNode.label); map.put(newNode.label, newNode); if(oldNode.next!=null) newNode.next = searchNodes(map,oldNode.next); if(oldNode.random!=null) newNode.random = searchNodes(map,oldNode.random); return newNode; } }
问题原因:遇到大量数据的时候递归次数过多,导致栈溢出
修改后算法:
public RandomListNode copyRandomList(RandomListNode head) { if(head==null) return null; HashMap<RandomListNode,RandomListNode> map = new HashMap<RandomListNode,RandomListNode>(); RandomListNode node = head; while(node!=null){ map.put(node, new RandomListNode(node.label)); node = node.next; } node = head; while(node!=null){ map.get(node).next = map.get(node.next); map.get(node).random = map.get(node.random); node = node.next; } return map.get(head); }
0 0
- LC138. Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- 计算机视觉三大顶级国际会议
- 2017年2月13日 天气晴
- [Java]Socket和ServerSocket学习笔记
- 手握数据,掌控未来(一)
- 初涉VS2010 关于调试下输入后enter直接退出问题
- LC138. Copy List with Random Pointer
- php通过拓展ssh2控制linux
- Android面试题(1)
- [LeetCode] 415. Add Strings 解题报告
- 内部类
- 快速搭建github.io博客
- Android 圆盘旋转/飞转菜单(高度定制化)
- linux 创建文件夹删除文件夹
- TortoiseCVS安装使用详解