![](https://img-blog.csdnimg.cn/img_convert/72e988e80bf13d1e20a120eddad06833.jpeg)
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
} Node, *LinkList;
void CreateFromTail(Node *head, int num); // 尾插法建表,num为链表长度
void SelectionSort(LinkList head, int num); // 选择排序法,num为整合后的链表C长度
int main()
{
LinkList Ahead, Bhead; // 创建A,B单链表
Ahead = (Node *)malloc(sizeof(Node));
Bhead = (Node *)malloc(sizeof(Node));
Node *Aend = Ahead, *Bend = Bhead, *pri = Ahead, *t = Ahead;
int Alength, Blength; // 单链表长度
scanf("%d %d", &Alength, &Blength);
CreateFromTail(Ahead, Alength); // 建表
CreateFromTail(Bhead, Blength);
for (int i = 0; i < Alength; i++)
{
t = t->next;
}
t->next = Bhead->next; // 将A,B链表连接
SelectionSort(Ahead, Alength + Blength); // 排序
for (int i = 0; i < Alength + Blength; i++)
{
pri = pri->next;
printf("%d ", pri->data); // 输出整合后的链表C
}
return 0;
}
void CreateFromTail(LinkList head, int num)
{
Node *insert, *end = head;
int data; //链表数据
for (int i = 0; i < num; i++)
{
scanf("%d", &data);
insert = (Node *)malloc(sizeof(Node));
insert->data = data;
end->next = insert;
end = insert;
end->next = NULL;
}
}
void SelectionSort(LinkList head, int num)
{
Node *left = head, *right = head, *sign;
int t;
for (int i = 0; i < num - 1; i++)
{
left = left->next;//left 代表要交换的数据,right用于遍历链表,sign代表另一个要交换的数据
right = left;
sign = left;
for (int j = i + 1; j < num; j++)
{
right = right->next;
if (right->data >= sign->data)
{
sign = right;
}
}
t = left->data;
left->data = sign->data;
sign->data = t;
}
}