正文
新建Node实体类
public class Node {
int val;
Node next;
Node random;
public Node(int val) {
this.val = val;
this.next = null;
this.random = null;
}
}
哈希表
public static Node copyRandomList(Node head) {
if (head==null)
return null;
Map<Node,Node> hashMap=new HashMap<>();
Node p=head;
while (p!=null){
Node newNode=new Node(p.val);
hashMap.put(p,newNode);
p=p.next;
}
p=head;
while (p!=null){
Node newNode=hashMap.get(p);
if(p.next!=null){
newNode.next=hashMap.get(p.next);
}
if (p.random!=null){
newNode.random=hashMap.get(p.random);
}
p=p.next;
}
return hashMap.get(head);
}
- 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
- 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
我有点懵逼,为什么是0ms,显示通过了,我一度怀疑是不是没执行,提交了好几次。头一次看到100%,难以言语。
哈希表与链表
-
先将原节点放入哈希表中,map.put(p,newNode);
-
再通过哈希表中原新节点,设置新的指向
-
newNode.next = map.get(p.next);
-
newNode.random = map.get(p.random);