プログラミングの問題(Java実装)の安全性を証明するためにオファー - 複製複合体のリスト

タイトル説明

複合入力リスト(各ノードがノードの値を有し、二つのポインタ、次のノードへの1つのポインティング、他のノードに特別なポインタ)、リスト複製複合体の頭部後の値を返します。(そうでない場合は、プログラムが直接空の宣告質問を返しますが、出力結果は、パラメータノード参照を返さないことに注意してください)

考え

最初のステップは、コピーされたノードは、各ノードの後ろに挿入されています。

第二段階は、ノードのランダムな割り当てのリンクをコピーします。

第3のステップと、分割。

実現

/*
public class RandomListNode {
    int label;
    RandomListNode next = null;
    RandomListNode random = null;

    RandomListNode(int label) {
        this.label = label;
    }
}
*/
public class Solution {
    public RandomListNode Clone(RandomListNode pHead)
    {
        if(pHead == null) return null;
        RandomListNode tmpHead = pHead;
        
        // 先克隆所有的节点并插入到该节点之后
        while(tmpHead != null){
            RandomListNode insert = new RandomListNode(tmpHead.label);
            insert.next = tmpHead.next;
            tmpHead.next = insert;
            tmpHead = insert.next;
        }
        tmpHead = pHead;
        // 克隆所有节点的random节点
        while(tmpHead != null){
            if(tmpHead.random != null){
                tmpHead.next.random = tmpHead.random.next;
            }
            tmpHead = tmpHead.next.next;
        }
        tmpHead = pHead;
        RandomListNode clone = pHead.next;
        //RandomListNode tmpClone = clone;
        // 重新调整所有节点的next节点
        while(tmpHead.next != null){
            RandomListNode tmp = tmpHead.next;
            tmpHead.next = tmp.next;
            tmpHead = tmp;
        }
        return clone;
    }
}

 思路参考:https://www.nowcoder.com/discuss/198840

おすすめ

転載: www.cnblogs.com/MWCloud/p/11323096.html