このアルゴリズムは、
O(N)(マージ)
、1.新しい保護ダミーヘッドノードをダミーCURへのポインタを設定します。
2. L2ノードポインタノードよりL1ヴァルヴァルポインタ値の現在の値が小さい場合、へのポインタ、次のようにCURのL1、L1およびシフト後の、そうでない場合、L2、L2へとシフト後。
図3はその後良い場所に配置されたCURに応じてポインタを移動させます。
L1またはL2まで、ステップ4上記サイクルは空です。
5. CURポインタの背後に残りL1又はL2。
時間複雑
2つのトラバースリンクされたリストは、時間計算量はO(N)
/ * *
*単独リンクリストのための定義。
*構造体ListNode {
* INTヴァル。
* ListNode *次の;
* ListNode(INT X):ヴァル(x)は、次の(NULL){}
*}。
* /
クラスソリューション{
パブリック:
ListNode *マージ(ListNode * L1、ListNode * L2){
ListNode *ダミー= 新しい ListNode(0 )。
ListNode * CUR = ダミー;
一方(L1 && L2){
場合(L1->ヴァル<L2-> ヴァル)
{
CUR - >次=L1、
L1 = L1-> 次に;
}
他
{
CUR - >次に= L2、
L2 = L2-> 次に;
}
CUR = CUR>次に; // 完了した後に後進CURを指す
}
// 裁判官まだ空L2、L1空に、そのリストの残りの要素を戦います。どのようにスペルするには?上の戦い?
// モザイクの残りの要素にcur->次にによって直接読み取ったコード
// > =次に:;(L1 L1 L2 = NULL!) - CUR
// ; COUT << ENDL << L1
/ / COUT << L2-> <<てendlヴァル;
// COUT << CUR>ヴァル<<てendl;
cur->次=(L1 == NULL?L2:L1)。
リターン dummy-> 次。
}
}。