コピーの顔複雑な連鎖オファー安全性を証明するために35個の質問 - リスト

/ * 
タイトル:
	機能を実装して、リストの複製コンプレックス、ヘッドノードは、コピーリストを返します。
* / 
/ * 
アイデア:
	最初のステップ、コピーリストS」、Sは元のリストに挿入されています。
	第二のステップ、ランダムポインタリストのチェーンS「Sの複製。
	第三ステップ:Sリストの分割およびS」。
* / 

の#include <iostreamの> 
する#include <string.hの> 
する#include <アルゴリズム> 
の#include <cmath> 
する#include <stdio.hに> 
する#include <ベクトル> 
の#include <スタック> 
の#include <キュー> 

名前空間STDを使用して、

RandomListNode {構造体
    INTラベル、
    構造体次にRandomListNode *、*ランダム; 
    RandomListNode(INT X):
            ラベル(X)、次に(NULL)、ランダム(NULL){ 
    } 
}; 


RandomListNodeクローン*(* RandomListNode PHEAD) 
{
    IF(PHEAD == nullptr A)PHEADリターン; 
    //最初のステップ、コピーリストS」、Sは、元のリストに挿入されます。
    = *•PNODE PHEAD RandomListNode、
    一方(•PNODE){ 
        RandomListNode * = newNode新しい新しいRandomListNode(pNode->ラベル); 
        newnode->次に= pNode->次に、
        pNode->次にnewNode =; 
        •PNODE = pNode->ネクスト>次に; 
    } 

    //第二工程、ランダムポインタリストのチェーンS「Sレプリケーション。
    = PHEAD•PNODE; 
    RandomListNode qNode * = pHead->次に、
    しばらく(qNode->次に&& qNode->ネクスト>次){ 
        IF(!pNode->ランダム= nullptr A){ 
            qNode->ランダム= pNode->ランダム>次に; 
        } 
        •PNODE = qNode->次に、
        qNode = pNode->次に、
    もし(pNode->ランダム= nullptr!)
        qNode->ランダム= pNode->ランダム>次。

    //第三步:。拆分链表S和S ' 
    PNODE = PHEAD。
    qNode = pHead->次。
    RandomListNode * qHead = pHead->次。
    一方、(PNODE){ 
        pNode->次= qNode->次。
        IF(qNode->次= nullptr!){ 
            qNode->次= qNode->ネクスト>次。
        } 
        PNODE = pNode->次。
        qNode = qNode->次。

    } 

    qHeadを返します。




} 

int型のmain(){ 
    RandomListNode *ノード1 =新しいRandomListNode(1)。
    RandomListNode *ノード2 =新しいRandomListNode(2); 
    RandomListNode *ノード3 =新しいRandomListNode(3);
    node1->次=ノード2。
    node2->次=ノード3。
    node2->ランダム=ノード1。
    RandomListNode * RES =クローン(ノード1)。
    (RES){一方
        COUT << RES->ラベル<< ENDL。
        RES = RES->次。
    } 

}

   

おすすめ

転載: www.cnblogs.com/buaaZhhx/p/11953965.html