トピック:
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型 [] = { 1、3、5、7、9 }。 INT B [] = { 2、2、4、4、6、6、8、8、10、10 }。 LINKLIST A、B。 A.creatE(5 )。 B.creatE(B、10 )。 A.unite(B)。 ショー(); リターン 0 ; }