首页 > 其他 > 详细

Copy List with Random Pointer

时间:2015-02-02 22:47:42      阅读:230      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!