#include<stdio.h>
#include<stdlib.h>
typedef struct Num {
int n;
struct Num* next;
}Num,*Linklist;
void show(Linklist link) {
Linklist head;
head = link;
link = link->next;
printf("\n");
while (link != NULL) {
printf("%d ",link->n);
link = link->next;
}
}
//不带地址选择排序
void sort(Linklist link) {
Linklist p, q;
p = link->next;
int temp = 0;
while (p->next != NULL) {
q = p->next;
while (q != NULL) {
if (p->n > q->n) {
temp = p->n;
p->n = q->n;
q->n = temp;
}
q = q->next;
}
p = p->next;
}
show(link);
}
//去重
Linklist pop(Linklist node) {
Linklist head = node,p = node->next,q = NULL,w = NULL;
while (p->next != NULL) {
q = p;
while (q->next != NULL) {
w = q->next;
if (w->n == p->n) {
q->next = w->next;
}
else {
q = q->next;
}
}
p = p->next;
}
return head;
}
Linklist combine(Linklist node1,Linklist node2) {
Linklist head = node1;
while (node1->next != NULL) {
node1 = node1->next;
}
node1->next = node2->next;
node1 = head;
node1 = pop(node1);
show(node1);
return node1;
}
Linklist generate(int n,Linklist node){
int i;
Linklist head = NULL;
for (i = 0; i < n; i++) {
head = (Linklist)malloc(sizeof(Num));
printf("\n请输入第%d个元素的数据 :",i+1);
scanf_s(" %d", &node->n,4);
head->next = node;
node = head;
}
show(head);
return head;
}
void reverse(Linklist link) {
Linklist head = link,temp,q;
temp = (Linklist)malloc(sizeof(Num));
if (temp == NULL) {
printf("\n开辟空间失败!");
return;
}
link = link->next;
temp = link->next;
link->next = NULL;
while (temp != NULL) {
q = temp->next;
temp->next = link;
link = temp;
temp = q;
}
head->next = link;
show(head);
}
int main() {
int n1,n2;
Linklist node1, node2,combine_node;
printf("请输入要创建第一个链表的长度:");
scanf_s("%d",&n1,4);
node1 = (Linklist)malloc(sizeof(Num));
if (node1 == NULL) {
printf("\n创立存储空间失败!");
return 0;
}
node1->next = NULL;
node1 = generate(n1,node1);
printf("\n请输入要创建第二个链表的长度:");
scanf_s(" %d", &n2,4);
node2 = (Linklist)malloc(sizeof(Num));
if (node2 == NULL) {
printf("\n创立存储空间失败!");
return 0;
}
node2->next = NULL;
node2 = generate(n2,node2);
combine_node = combine(node1,node2);
reverse(combine_node);
sort(combine_node);
return 0;
}