02-线性结构1 两个有序链表序列的合并 (15分)
#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 );
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() {
int n, num;
scanf("%d", &n);
List L1 = (List)malloc(sizeof(struct Node));
List temp = L1;
temp->Next = nullptr;
while (n--) {
scanf("%d", &num);
List node = (List)malloc(sizeof(struct Node));
node->Next = nullptr;
node->Data = num;
temp->Next = node;
temp = node;
}
return L1;
}
void Print( List L ) {
if (L->Next == nullptr) {
printf("NULL\n");
return ;
}
while (L->Next) {
printf("%d ", L->Next->Data);
L = L->Next;
}
printf("\n");
}
List Merge( List L1, List L2 ) {
List p = L1->Next, q = L2->Next;
List p3 = (List)malloc(sizeof(struct Node)), temp;
p3->Next = nullptr;
temp = p3;
while(p && q) {
if (p->Data <= q->Data) {
temp->Next = p;
p = p->Next;
} else {
temp->Next = q;
q = q->Next;
}
temp = temp->Next;
}
if (p) {
temp->Next = p;
}
if (q) {
temp->Next = q;
}
L1->Next = nullptr;
L2->Next = nullptr;
return p3;
}