复杂链表的复制(中等)
2020年9月3日
题目来源:力扣
解题
利用HashMap来复制,必须首先复制值,再复制关系,否则指针会指向混乱。
/*
// Definition for a Node.
class Node {
int val;
Node next;
Node random;
public Node(int val) {
this.val = val;
this.next = null;
this.random = null;
}
}
*/
class Solution {
//HashMap实现
public Node copyRandomList(Node head) {
//定义一个map,用来存放新的链表
Map<Node,Node> map=new HashMap<>();
//虚假头节点
Node node=head;
//遍历链表,先存放数值
while(node!=null){
map.put(node,new Node(node.val));
node=node.next;
}
//再从头开始
node=head;
//遍历链表,添加关系
while(node!=null){
map.get(node).next=map.get(node.next);
map.get(node).random=map.get(node.random);
node=node.next;
}
return map.get(head);
}
}