//将两个单链表合并为一个新的链表,并由函数返回结果单链表
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
int data;
struct LNode* next;
}LNode, * LinkList;
void CreateLinkList(LinkList& L, int n) {
L = (LinkList)malloc(sizeof(LNode));
LNode* p, * q;
p = L;
L->next = NULL;
for (int i = 0; i < n; i++) {
q = (LinkList)malloc(sizeof(LNode));
scanf("%d", &q->data);
p->next = q;
p = q;
}
p->next = NULL;
}
LinkList MergeLinkList(LinkList& A, LinkList& B) {
LNode* p = A->next, * q = B->next;
LinkList C;
C = (LinkList)malloc(sizeof(LNode));
LNode* r = C, * s;
C->next = NULL;
while (p != NULL && q != NULL) {
if (p->data <= q->data) {
s = (LinkList)malloc(sizeof(LNode));
s->data = p->data;
r->next = s;
r = s;
p = p->next;
}
else {
s = (LinkList)malloc(sizeof(LNode));
s->data = q->data;
r->next = s;
r = s;
q = q->next;
}
}
if (p != NULL) {
while (p != NULL) {
s = (LinkList)malloc(sizeof(LNode));
s->data = p->data;
r->next = s;
r = s;
p = p->next;
}
}
else {
while (q != NULL) {
s = (LinkList)malloc(sizeof(LNode));
s->data = q->data;
r->next = s;
r = s;
q = q->next;
}
}
r->next = NULL;
return C;
}
void PrintLinkList(LinkList L) {
LNode* p = L->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
}
int main() {
int m, n;
LinkList A, B, C;
scanf("%d", &m);
CreateLinkList(A, m);
scanf("%d", &n);
CreateLinkList(B, n);
C = MergeLinkList(A, B);
PrintLinkList(C);
return 0;
}
03-18
408