forked from Jensenczx/CodeEveryday
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path54_copyRandomList.java
47 lines (47 loc) · 1.33 KB
/
54_copyRandomList.java
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
37
38
39
40
41
42
43
44
45
46
47
class RandomListNode {
int label;
RandomListNode next, random;
RandomListNode(int x) { this.label = x; }
};
public class Solution {
/**
* @param pHead: The pHead of linked list with a random pointer.
* @return: A new pHead of a deep copy of the list.
*/
public RandomListNode copyRandomList(RandomListNode pHead) {
// write your code here
if(pHead==null)
return null;
RandomListNode tmp = pHead;
//节点复制
while(tmp.next!=null){
RandomListNode node = tmp.next;
RandomListNode node1 = new RandomListNode(tmp.label);
tmp.next = node1;
node1.next = node;
tmp = node;
}
tmp.next = new RandomListNode(tmp.label);
tmp = pHead;
//随机节点复制
while(tmp.next!=null){
tmp.next.random = tmp.random;
tmp = tmp.next.next;
if(tmp==null)
break;
}
//节点链拆分
tmp = pHead;
RandomListNode result = tmp.next;
RandomListNode travelNode = result;
tmp.next = travelNode.next;
tmp = tmp.next;
while(tmp!=null){
travelNode.next = tmp.next;
travelNode = travelNode.next;
tmp.next= travelNode.next;
tmp = tmp.next;
}
return result;
}
}