看了前几个大佬的题解,感觉自己的挺容易理解的,具体注释应该能解释清楚
import java.util.HashMap;
public class Solution {
public RandomListNode Clone(RandomListNode pHead) {
if (pHead == null) return null;
// target 作为将要返回的头,记住要new的
RandomListNode target = new RandomListNode(pHead.label);
// cur 获取链表头
RandomListNode cur = pHead;
// p 获取新链表头
RandomListNode p = target;
HashMap<randomlistnode, randomlistnode> map = new HashMap<>();
// 由pHead将所有值存入map,每一个结点都要new的
while (pHead != null) {
map.put(pHead, new RandomListNode(pHead.label));
pHead = pHead.next;
}
// target作为新链表的头,由cur,p移动来复制链表
while (cur != null) {
p.next = map.get( cur.next );
p.random = map.get( cur.random );
cur = cur.next;
p = p.next;
}
return target;
}
} 多谢评论区大佬指出,本代码有存在一定问题,暂时未修改。

京公网安备 11010502036488号