コピーのN25_複雑な連鎖

タイトル説明

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

:考え
* 1、ノードなど、A1、ノードAの背面にノードA1を得たコピーを各ノードのコピー、リストをトラバースし、
* 2、再トラバースリスト、新しいノード接合に古いランダムポインタをコピーしますポイントは、A.random.next = A1.randomとして;
。* 3、スプリットリスト、リストは複製後に元のリストとリストに分割されます

/ * 
パブリッククラス{RandomListNodeの
    INTラベル; 
    RandomListNode次に= NULL; 
    RandomListNodeランダム= NULL; 

    RandomListNode(INTラベル){ 
        this.labelラベル=; 
    } 
} 
* / 
publicクラスソリューション{ 
    公共RandomListNodeクローン(RandomListNode PHEAD)
    { 
      	// 1。 ;、このようなノードとして、各ノードをコピーし、リストをトラバースコピーA1、リア接続点AにノードA1得
		IF(PHEAD == NULL){戻りNULL;} 
		RandomListNode C = PHEAD; //へのポインタを現在のノード
		一方(C = NULL!){ 
			RandomListNode新しい新しいクローン= RandomListNode(c.label); 
			clone.next = c.next; 
			clone.random = NULL; 
            c.next =クローン; 
			C = clone.next; 
		}
		
		// 2、リスト再綾振り、そのような= A.random.next A1.randomとして新しいノードに古いランダムノードポインタを、コピー; 
		C = PHEAD; 
		ながら(!C = NULL){ 
			RandomListNodeクローン= c.next。
			IF(!c.random = NULL){ 
				clone.random = c.random.next; 
			} 
			C = clone.next; 
		} 
		
		//リスト3分割、元のリストの後に分割し、コピーリストのリスト。
		C = PHEAD ; 
		RandomListNode cloneHead = pHead.next; 
		ながら(C = NULL!){ 
			RandomListNodeクローン= c.next; 
			c.next = clone.next; 
			IF(clone.next == NULL)clone.next = NULL; 
			他{クローン。 = c.next.next次に;} 
			C = c.next; 
		} 
		
		
		cloneHeadを返します; 
    } 
}

  

おすすめ

転載: www.cnblogs.com/kexiblog/p/11131082.html