题目已知部分
#include <stdio.h>
#include <stdlib.h>
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 L1, List L2 );
int main()
{
List L1, L2, L;
L1 = Read();
L2 = Read();
L = Merge(L1, L2);
Print(L);
Print(L1);
Print(L2);
return 0;
}
读入
List Read()
{
ElementType n, data;
scanf("%d", &n);
List L, p,last;
L = (List)malloc(sizeof(struct Node)); // 给头指针分配一个内存
last=L;
int i;
for (i=0; i<n; i++){
scanf("%d", &data);
p = (List)malloc(sizeof(struct Node)); // 给要加入的 p分配一个内存
p->Data = data;
p->Next = NULL;
last->Next = p; // 把 p接到链表 L上,并让最后一个(last)变为 p
last = p;
}
return L;
}
输出
void Print(List L)
{
List p;
p = L->Next;
if (p == NULL){
printf("NULL\n");
return;
}
for ( ; p != NULL; p=p->Next)
printf("%d ", p->Data);
printf("\n");
}
合并排序
List Merge (List L1, List L2)
{
List L,p1,p2,last;
p1=L1->Next;
p2=L2->Next;
L = (List)malloc(sizeof(struct Node)); // 建一个新链表
last = L;
while (p1 != NULL && p2!= NULL){
if (p1->Data <= p2->Data){
last->Next = p1; // 同上同上
last = p1;
p1 = p1->Next;
}
else{
last->Next = p2;
last = p2;
p2 = p2->Next;
}
}
if (p1 != NULL) // 把还有剩余的链表接到 L上
last->Next = p1;
else
last->Next = p2;
L1->Next = NULL; // L1 L2置空
L2->Next = NULL;
return L;
}