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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 |
/** * 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) { RandomListNode newHead = new
RandomListNode( 0 ); Map<RandomListNode, RandomListNode> oldToNew = new
HashMap<RandomListNode, RandomListNode>(); Map<RandomListNode, RandomListNode> newToOld = new
HashMap<RandomListNode, RandomListNode>(); if (head != null ){ RandomListNode nextNode = head; RandomListNode nextNewNode = newHead; while (nextNode != null ){ nextNewNode.next = new
RandomListNode(nextNode.label); nextNewNode = nextNewNode.next; oldToNew.put(nextNode, nextNewNode); newToOld.put(nextNewNode, nextNode); nextNode = nextNode.next; } nextNewNode.next = null ; nextNewNode = newHead.next; while (nextNewNode != null ){ RandomListNode tempOld = newToOld.get(nextNewNode); RandomListNode tempnew = oldToNew.get(tempOld.random); nextNewNode.random = tempnew; nextNewNode = nextNewNode.next; } } newHead = newHead.next; return
newHead; } } |
leetcode--Copy List with Random Pointer
原文:http://www.cnblogs.com/averillzheng/p/3565856.html