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