题目来源:leeteod138. 复制带随机指针的链表
思路:
先建立含有相同数据(不包括指针next和random)的节点,再根据原链表将这些结点链接起来。
难点:
新建的结点没有指向它的头结点,链接时无法获取结点
利用map可以将新的结点和旧的结点映射起来,链接时直接找新结点的映射即可
java map
1.HashMap<K,V>:存储数据采用的哈希表结构
2.LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构和链表结构
3.两者区别:元素的存取顺序是否一致
4.Map接口中的两个泛型变量<K,V>的数据类型任意
Map<Object, Object> map1 = new HashMap<Object, Object>();
Map<Object, Object> map2 = new LinkedHashMap<Object, Object>();
map1.put(key, value);
map2.get(key);
解答
class Solution {
Map<Node, Node> map ;
public Solution(){
map = new HashMap();
}
public Node copyRandomList(Node head) {
Node temp = head;
sall(temp);
temp = head;
while(temp != null) {
//通过map找到新建的结点
map.get(temp).next = map.get(temp.next);
map.get(temp).random = map.get(temp.random);
temp = temp.next;
}
return map.get(head);
}
public void sall(Node head) {
//遍历链表,复制结点
while(head != null) {
Node newNode ;
//建立映射关系
map.put(head, newNode = new Node(head.val));
head = head.next;
}
}
}