6-1 2つの順序付きチェーンシーケンスの統合(15分)


本題は一つの関数を実現して、二つのチェーンが表しているインクリメントされた整数系列を一つのインクリメントされていない整数系列にマージします.関数インターフェースの定義:
List Merge(List L 1、List L 2)
List構造の定義は以下の通りである.
typedef struct Node PtrToNode;struct Node{ElementType Data]/結点データを記憶する/PtrToNode Next;/次の結点を指すポインタ/}typedef PtrToNode List;/シングルチェーンの種類を定義*/
L 1およびL 2は、所定の先頭ノードの単一チェーンテーブルであり、そのノードに格納されているデータは、インクリメント順序である.関数Mergeは、L 1とL 2をインクリメントしない整数系列に結合します.元のシーケンスの結点を直接使用して、帰結後の先頭結点のチェーンポインタを返します.審判試験手順の例:
ヽoo.ツ............................................................
typedef int ElementType;typedef struct Node*PtrToNode;struct Node{ElementType Data;PtrToNode Next;;;typedef PtrToNode List;
List Read()/*詳細はここでは表/void Print(List L)/詳細はここでは示しません.空チェーンはNULL*/を出力します.
List Merge(List L 1、List L 2)
int main(){List L 1,L 2,L;L 1=Read();L=Merge(L 1,L 2);Print(L 1);Print(L 1);Print(L 2);Print(L 2);return 0;
//*あなたのコードはここに埋め込まれます.
入力サンプル:
3 1 3 5 5 2 4 6 8 10
出力例:
1 2 3 4 5 6 8 NULL NULL
List Merge( List L1, List L2 )
{
	List a,b,c,x;
	x=(List)malloc(sizeof(struct Node)); 
	a=L1->Next;
	b=L2->Next;
	c=x;
	while(a&&b)
	{
		if(a->Data<=b->Data)
		{
			c->Next=a;
			c=a;
			a=a->Next;
		}
		else
		{
			c->Next=b;
			c=b;
			b=b->Next;
		}
	}
	c->Next=a?a:b;
	L1->Next=NULL;
	L2->Next=NULL;
	return x;
	
}