第一行输入第一个链表的结点数S1,S1<=100。
第二行输入S1个整数,两两之间用空格隔开。
第三行输入第二个链表的结点数S2,S2<=100。
第四行输入S2个整数,两两之间用空格隔开。
输出合并之后的链表结果,两两之间用空格隔开,末尾没有空格。
#include
using namespace std;
typedef struct node {
int data;
struct node* next;
}LNode,*LinkList;
//链表合并
LinkList MergeList(LinkList L1, LinkList L2) {
LinkList L3= (LinkList)malloc(sizeof(LNode));
L3->next = NULL;
LNode* r3 = L3;//r3始终指向L3的尾部
LNode* p1 = L1->next;
LNode* p2 = L2->next;
while (p1 != NULL && p2 != NULL) {
LNode* s = (LNode*)malloc(sizeof(LNode));
if (p1->data < p2->data) {
s = p1;
p1 = p1->next;
s->next = r3->next;
r3->next = s;
r3 = s;
}
else {
s = p2;
p2 = p2->next;
s->next = r3->next;
r3->next = s;
r3 = s;
}
}
if (p1 != NULL)
r3->next = p1;
if (p2 != NULL)
r3->next = p2;
return L3;
}
int main() {
int s1;
cin >> s1;//第一个链表的结点数
LinkList L1 = (LinkList)malloc(sizeof(LNode));
L1->next = NULL;
LNode *r1 = L1;
//用尾插法给链表L1插入一组有序元素
for (int i = 0; i < s1; ++i) {
LNode *s= (LNode *)malloc(sizeof(LNode));
cin >> s->data;
s->next = r1->next;
r1->next = s;
r1 = s;
}
r1->next = NULL;
int s2;
cin >> s2;//第一个链表的结点数
LinkList L2 = (LinkList)malloc(sizeof(LNode));
L2->next = NULL;
LNode* r2 = L2;
//用尾插法给链表L1插入一组有序元素
for (int i = 0; i < s2; ++i) {
LNode* s = (LNode*)malloc(sizeof(LNode));
cin >> s->data;
s->next = r2->next;
r2->next = s;
r2 = s;
}
r2->next = NULL;
LinkList L3=MergeList(L1, L2);
LNode* p = L3;
while (p->next != NULL) {
cout << p->next->data << ' ';
p = p->next;
}
}