码迷,mamicode.com
首页 > 其他好文 > 详细

Copy List with Random Pointer

时间:2015-02-02 22:49:40      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

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.

思路

遍历list将所有节点new一个出来放到hashmap中,第二遍遍历list将旧的节点对应新节点取出来组成链表就okay了

 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 import java.util.HashMap;
10 import java.util.Map;
11 
12 public class Solution {
13     public RandomListNode copyRandomList(RandomListNode head) {
14         if(head == null)
15             return head;
16         Map<RandomListNode, RandomListNode> old2new = new HashMap<RandomListNode, RandomListNode>();
17         
18         //新的头结点
19         RandomListNode newHead = new RandomListNode(head.label);
20         old2new.put(head, newHead);
21         
22         RandomListNode tempHead = head.next;                                    //所有的节点放到hashmap中
23         while(tempHead != null){
24             RandomListNode tempNode = new RandomListNode(tempHead.label);
25             old2new.put(tempHead, tempNode);
26             tempHead = tempHead.next;
27         }//while
28         
29         RandomListNode tempNewHead = null;
30         tempHead = head;
31         
32         while(tempHead != null){
33             tempNewHead = old2new.get(tempHead);
34             tempNewHead.next = old2new.get(tempHead.next);
35             tempNewHead.random = old2new.get(tempHead.random);
36             tempHead = tempHead.next;
37             tempNewHead = tempNewHead.next;
38         }//while
39         
40         return newHead;
41     }
42 }

 

Copy List with Random Pointer

标签:

原文地址:http://www.cnblogs.com/luckygxf/p/4268731.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!