2025年- H41-Lc149 --138. 随机链表的复制(链表,哈希)-(需二刷)--Java版
1.题目描述
2.思路
我的理解是拷贝就说把第二个数往前移动1格,以此类推,后往前移动一格
(ABC)(BCA)
3.代码实现
/*
// 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 {public Node copyRandomList(Node head) {Node cur=head;if(head==null){return null;}Map<Node,Node> map=new HashMap<>();//3.赋值各节点,建立原节点-》新节点的映射(map)while(cur!=null){Node curVal=new Node(cur.val);//把节点的值存到map里面map.put(cur,curVal);cur=cur.next;}//这段代码结束,说明遍历完原链表,此时cur=null// 如果不重新赋值,cur 此时是 null,第二个while 根本不会进入!cur=head;//4.构建链表next和randaom指向while(cur!=null){map.get(cur).next=map.get(cur.next);map.get(cur).random=map.get(cur.random);cur=cur.next;}//5.返回新链表的头节点return map.get(head);}
}