Copy List with Random Pointer
来源:互联网 发布:架子鼓视频软件 编辑:程序博客网 时间:2024/06/03 06:06
Copy List with Random Pointer
Total Accepted: 15399 Total Submissions: 67259My SubmissionsA 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.
Discuss
这个题目,其实挺简单的,要把原链表的每一个元素都拷贝一遍,不能拷贝多,也不能少拷贝。使用set和map可以,知道原来链表当中的节点是否访问过,没有就new一个节点,并以原链表节点为key,新链表节点为值存储起来,以后可能会用到。所以就以第一个节点为起始点,每次查询这个节点的random和next如果,这两个节点在拷贝链表当中没有对应的,那就new新的。有就直接取出来,然后对random和next建立相关连接信息。
/** * 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> set1 = new HashMap<RandomListNode,RandomListNode> (); Map<RandomListNode,RandomListNode> set2 = new HashMap<RandomListNode,RandomListNode> (); RandomListNode r1,r2,r3,r4,r5,r6; if(head==null) return null; RandomListNode newHead = new RandomListNode(head.label); r1 = newHead; set1.put(head, head); set2.put(head, newHead); while(head!=null) { //make r1 to equals to head if(!set1.containsKey(head)) { set1.put(head, head); r1 = new RandomListNode(head.label); set2.put(head, r1); }else { r1 = set2.get(head); } // make r3 equals to head next; r2 = head.next; if(r2!=null) { if(!set1.containsKey(r2)) { set1.put(r2, r2); r3 = new RandomListNode(r2.label); set2.put(r2,r3); }else{ // this place is set2 r3 = set2.get(r2); } }else { r3 = null; } // set t.next as r3 r1.next = r3; //make r5 equals to head.random r4 = head.random; if(r4!=null) { if(!set1.containsKey(r4)) { set1.put(r4, r4); r5 = new RandomListNode(r4.label); set2.put(r4, r5); }else {r5 = set2.get(r4);} }else { r5 = null; } r1.random = r5; head = head.next; } return newHead; }}
0 0
- 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
- 【HDOJ】1003,反思及代码
- Codeforces Round #259 (Div. 1)——Little Pony and Harmony Chest
- 454C. Little Pony and Expected Maximum
- Centos 7 grub2相关
- DB Link
- Copy List with Random Pointer
- 菜鸟的安卓实习之路----android控件自己做
- 解密:Java开发包的种类(第一篇)
- java学习123之构造方法
- Mac 下 Nginx、MySQL、PHP-FPM 的安装配置
- opencv将图像数据写入二进制(.dat)文件
- 一个解决方案
- Java杂谈之StringBuffer----兼带String,StringBuffer,StringBuilder的区别
- java获得本机ip