JasonChang

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 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         HashMap<RandomListNode, RandomListNode> map = new HashMap<RandomListNode, RandomListNode>();
12         RandomListNode fakehead = new RandomListNode(0);
13         RandomListNode runner = head;
14         RandomListNode newrunner = fakehead;
15         
16         while(runner!=null){
17             RandomListNode node = null;
18             if(map.containsKey(runner)){
19                 node = map.get(runner);
20             }
21             else{
22                 node = new RandomListNode(runner.label);
23                 map.put(runner, node);
24             }
25             newrunner.next = node;
26             
27             if(runner.random!=null){
28                 if(map.containsKey(runner.random)){
29                     node = map.get(runner.random);
30                 }
31                 else{
32                     node = new RandomListNode(runner.random.label);
33                     map.put(runner.random, node);
34                 }
35                 newrunner.next.random = node;
36             }
37             newrunner = newrunner.next;
38             runner = runner.next;
39         }
40         return fakehead.next;
41     }
42 }

 

posted on 2013-12-01 13:18  JasonChang  阅读(354)  评论(0)    收藏  举报