剣指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;
    }