タイトル説明
複合入力リスト(各ノードがノードの値を有し、二つのポインタ、次のノードへの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; } }