Copy List with Random Pointer
2014-08-02 10:39
344 查看
Copy List with Random Pointer
Total Accepted: 15399 TotalSubmissions: 67259My Submissions
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.
Have you been asked this question in an interview?
Yes
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; } }
相关文章推荐
- LeetCode - Copy List with Random Pointer
- LeetCode----Copy List with Random Pointer 深度拷贝,浅度拷贝,Lazy拷贝解析
- LeetCode Copy List with Random Pointer
- Copy List with Random Pointer
- leetcode Copy List with Random Pointer
- [LeetCode] Copy List with Random Pointer, Solution
- Leetcode#138 Copy List with Random Pointer
- LeetCode之Copy List with Random Pointer
- Copy List with Random Pointer
- copy-list-with-random-pointer
- Copy List with Random Pointer --- LeetCode
- Copy List with Random Pointer -- LeetCode
- [leetcode]copy-list-with-random-pointer
- Leetcode:Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer
- 2.2.10—单链表—Copy List with Random Pointer
- leetcode Copy List with Random Pointer
- Copy List with Random Pointer
- Copy List with Random Pointer