【小熊刷题】Copy List with Random Pointer <可再复习思路>
2015-08-20 06:11
471 查看
Copy List with Random Pointer
Question
A linked list is given such that each node contains an additional random pointer that could point to any node in the list or null.Return a deep copy of the list.
*Difficulty: Hard, Frequency: High
https://leetcode.com/problems/copy-list-with-random-pointer/
My Solution
看了一下提示搞出来的,其实大概的意思就是,用一个map来记住原来的liskedlist的每个node对应着新建linkedlist(deepcopy)的哪个node。<之后书上的另一个方法其实也是这个意思,只不过通过改linkedlist结构节省map的空间而已,本质上没太大区别>/** * Definition for singly-linked list with a random pointer. * class RandomListNode { * int label; * RandomListNode next, random; * RandomListNode(int x) { this.label = x; } * }; */ public class Solution { public RandomListNode copyRandomList(RandomListNode head) { Map<RandomListNode, RandomListNode> map = new HashMap<>(); RandomListNode p = head; RandomListNode dummyHead = new RandomListNode(0); RandomListNode q = dummyHead; while(p != null){ q.next = new RandomListNode(p.label); map.put(p, q.next); p = p.next; q = q.next; } p = head; q = dummyHead; while(p != null){ q.next.random = map.get(p.random); p = p.next; q = q.next; } return dummyHead.next; } }
To be continued, 回去再看一下直接把copy的node加在原node后面变成一个双倍长度的linkedlist再去掉之前的node的方法…
相关文章推荐
- Chapter 1 OpenStack架构
- HTML编程、网站前台设计、网站后台开发
- hdu 5381 The sum of gcd (线段树x树状数组x区间和维护进阶x离线处理)
- loop
- optional
- 成为OpenStack工程师
- 关于OpenStack的学习路线及相关资源汇总
- openat函数的用法示例
- linux 信号详解
- Linux下查看在线用户及用户进程
- Linux下查看在线用户
- linux多线程编程详解
- Tomcat 8.0安装和使用
- 【Powershell】【计数器】实时获取邮箱服务器的队列
- 大型网站技术架构的演进
- centos安装devtoolset-3支持gcc 4.9.2
- Centos配置国内yum源
- centos --- phpunit 安装过程
- CENTOS linux kernel 内核编译
- 架构编译器框架系统 LLVM 使用简介