逆の合併で表2-15秩序放課後の運動(一本鎖フォーカスアルゴリズム)

トピック:

11Aおよび11Bは、追加のヘッドノードを非減少順に並べ2つの単一のヘッド・ポインタ・リストを備えています。二つの表は、非増分と秩序の単一のリストに結合されています。結果は、2つのリストに加えて、追加のストレージスペースを取ることはできません。

Linklist.h

#pragma一度
の#include <iostreamの>
 使用して 名前空間はstdを、

クラスlノード{
 パブリックint型のデータ。
    lノード * 次の; 
}。

クラスLINKLIST {
 パブリック
    lノード * 最初。

    LINKLIST(){ 
        最初 = 新しいlノード()。
        最初 - >データ= 666 
        最初 - >次= nullptr。
    } 
    ボイド作成(INT ARR []、int型 {N)
        lノード * P; 
        lノード * sの。
        P = 最初;
        以下のためにINT iが= 0 ; I <N I ++ ){ 
            S = 新しいlノードを(); 
            S - >データ= ARR [I]。
            P - >次= S; 
            P = S; 
        } 
    } 
    ボイドショー(){ 
        lノード * P。
        P =初段> 次。
        しばらく(P!= nullptr){ 
            COUT << p型>データ<< ; 
            P = P - > 次。
        } 
        COUT << ENDL。
    } 

    ボイドユナイト(LINKLIST B){
         // 先合并 
        lノード* HA = 最初; 
        lノード * HB = B.first。  // 题目要求头指针为ヘクタール、HB 
        lノード* P = HA-> 次。
        lノード * Q = HB-> 次。
        lノード * sの。
        一方、(Q->次!= nullptr && P->次!= nullptr){
             場合(Q->データ> = P->データ&& Q->データ<= P->データ){ 
                S = Q; 
                Q = Q-> 次に、
                S - > P-次に=> 次に、
                P - >次に= S; 
            } 
            そうでなければ{ 
                P = P-> 次に; 
            } 
        } 
        IF(P->次に= !&& nullptr A = Q = nullptr A){ 
            P - >次に= Qを; 
        } 

        //は、後退開始
        / * * 
        逆の順序で単一のリストのアルゴリズムのアイデアを:
        (頭) - >(1) - >(2) - >(3)。。 - >(4) - > NULLの
        STEP 1:。
        3つのノードポインタを作成します。ユニリンクリストので、3以下にポインタ
        lノード* P1 =頭部>次に、* P2 = P1->次に、P3 * = P2->次に、
        (ヘッド) - >(1 / P1)。 - >(2 / P2) - > - >(4) - >ヌル(3 / P3)

        ステップ2:
        ヌルを指すようにP1 
        P1->次に= nullptr A; 
        NULL < - (1 / P1)(2 / P2) - > - >(4) - > NULL(ヘッド) - >(1)(3 / P3)

        ステップ3:
        循環へのポインタを変更する
        一方、{(!P3 = nullptr A)
            P2->次に= P1、
            P1 = P2、
            P2 P3 =; 
            P3 = P3->次に; 
        } 
            最初のサイクルの後に:
            (4 / P3)NULL < - - (3 / P2) - (1)<(2 / P1)> - > NULL(ヘッド) - > (1)
            第二サイクルの後:
            - (1)< - NULL <(2)<

        ステップ4: 
        最後のグループノードのポインタとアドレスヘッダを処理
        P2->次に= P1。
        ヘッド= P2; 
        NULL < - (1)< - (2)< - (3 / P1)< - (4 / P2)< - (ヘッド)NULL / P3 
        * / 

        lノード * P1。
        lノード * p2の。
        lノード * P3。
        P1 = HA-> 次。
        P2 = P1-> 次。
        P3 = P2-> 次。
        P1 - >次= nullptr;
        一方、(!P3 = nullptr){ 
            P2 - >次= P1。
            P1 = P2; 
            P2 =P3; 
            P3 = P3-> 次。
        } 
        P2 - >次= P1。
        HA - >次= P2; 
    } 

}。

main.cppに

#include " LinkList.h " 
int型のmain(){
     int型 [] = { 13579 }。
    INT B [] = { 224466881010 }。
    LINKLIST A、B。
    A.creatE(5 )。
    B.creatE(B、10 )。
    A.unite(B)。
    ショー(); 
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/SlowIsFast/p/12530174.html