题目:
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
测试用例
理解题意
不说废话:自己新建节点,完成链表的复制。
再说一句废话:就和你抄别人作业一样
思路
利用HashMap 键值对应
// 建立一个HashMap, key存原来链表节点, value存新建节点
HashMap<Node,Node> map=new HashMap<Node,Node>();
Map.put(cur,new Node(cur.val));
//map.get(cur)是操作节点(是你自己新建的节点)
//map.get(cur).next,所以你应该根据原来的对应节点指向的节点,找出你应该对应的节点map.get(cur.next);
map.get(cur).next=map.get(cur.next);
map.get(cur).random=map.get(cur.random);
class Solution {
public Node copyRandomList(Node head) {
//新建Hashmap 存放旧节点与新节点对应关系
HashMap<Node,Node> map=new HashMap<Node,Node>();
Node cur=head;
//遍历原始链表,填充HashMap表
while(cur!=null){
//注意New Node(cur.val) HashMap中节点对应只是节点不一样
//内容一样的,和抄作业是一样的
map.put(cur,new Node(cur.val));
cur=cur.next;
}
cur=head;
while(cur!=null){
map.get(cur).next=map.get(cur.next);
map.get(cur).random=map.get(cur.random);
cur=cur.next;
}
//在HashMap 找出新建的头节点
return map.get(head);
}
}