自己首先这道题是没有做出来的,是看了题解之后才敲出来的。
题解很精妙。反正我开始做这个题没有想出来。
用了HashMap,键存放原来链表的结点,值存放克隆后的新结点。
先将新旧结点存放在HashMap中,然后在循环里面来连接新结点,同时也连接新结点的random。两者同时连接。时间复杂度为O(N),很巧妙。话不多说,上代码。
class Solution {
public Node copyRandomList(Node head) {
Node cur=head;
HashMap<Node,Node> map=new HashMap<>();
while(cur!=null){
Node m=new Node(cur.val);
map.put(cur,m);
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;
}
return map.get(head);
}
}
小党继续做题中,愿各位大佬来指点指点。