#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct NODE {
int n;
struct NODE* next;
}NODE;
void Create(NODE* head, int n) {//尾插法创建单链表
NODE* q = head;
for (; n > 0; n--) {
NODE* p = (NODE*)malloc(sizeof(NODE));
if (p) {
int s;
scanf("%d",&s);
p->n = s;
q->next = p;
q = p;
}
}
q->next = NULL;
}
void Output(NODE* head) {//输出单链表中的数据
NODE* p = head->next;
while (p) {
printf("%d ", p->n);
p = p->next;
}
}
void Function(NODE* head,NODE* head1,NODE* head2){//完成题目要求的功能
NODE* p1=head1->next;
NODE* p2=head2->next;
while(p1&&p2){
NODE* p=(NODE*)malloc(sizeof(NODE*));
if((p1->n)>(p2->n)){
p->n=p2->n;
p2=p2->next;
p->next=head->next;
head->next=p;
}
else if((p1->n)<(p2->n)){
p->n=p1->n;
p1=p1->next;
p->next=head->next;
head->next=p;
}
else{
p->n=p1->n;
p2=p2->next;
p->next=head->next;
head->next=p;
}
}
while(p1){
NODE* p=(NODE*)malloc(sizeof(NODE*));
p->n=p1->n;
p1=p1->next;
p->next=head->next;
head->next=p;
}
while(p2){
NODE* p=(NODE*)malloc(sizeof(NODE*));
p->n=p2->n;
p2=p2->next;
p->next=head->next;
head->next=p;
}
}
int main()
{
int m,n;
scanf("%d%d",&m,&n);//1.输入2个链表的长度,让它们分别为m,n
NODE* head1=(NODE*)malloc(sizeof(NODE));
NODE* head2=(NODE*)malloc(sizeof(NODE));
NODE* head=(NODE*)malloc(sizeof(NODE));
head1->next=head2->next=head->next=NULL;
if(head1&&head2){
Create(head1,m);
Create(head2,n);//2.向2个链表中填充数据
}
Function(head,head1,head2);//3.完成题目要求的复杂操作
Output(head);//4.完成题目要求的输出
return 0;
}
西工大NOJ数据结构理论——004.单链表的归并(耿2.21)
于 2022-03-10 22:23:05 首次发布