剣指offer JavaScript版(25)
複雑なチェーンのコピーは、まずチェーンテーブルを複製し、mapによって対応する新しいチェーンノードと元のチェーンノードを保存し、その後、ランドムチェーンポインタを複製する.
function RandomListNode(x){
this.label = x;
this.next = null;
this.random = null;
}
function Clone(pHead)
{
// write code here
if(pHead==null)return null;
const m=new Map();
let p=pHead;
let p2=new RandomListNode(pHead.label);
const pHead2=p2;
map.set(p,p2)
while(p){
if(p.next)p2.next=new RandomListNode(p.next.label);
else p2.next=null;
p=p.next;
p2=p2.next;
m.set(p,p2)
}
p=pHead;
p2=pHead2;
while(p!==null){
p2.random=m.get(p.random);
p=p.next;
p2=p2.next;
}
return pHead2;
}