本人菜鸟一枚,目前刚刚接触链表题目,哪里写的不好请多多指教
(^∀^●)ノシ
题目描述
已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。
输入格式
第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成
输出格式
按照学号升序排列的数据
样例输入
复制
2 3 5 100 6 89 3 82 4 95 2 10
样例输出
复制
2 10 3 82 4 95 5 100 6 89
#include<stdio.h> #include<stdlib.h> typedef struct Student{ int num; int grade; struct Student *next; }Node,*node; node creat(int n);//创建链表 void unite(node head1,node head2);// 结合链表 void order(node head,int sum);//排序链表 void output(node head);//打印链表 int main(){ int a,b; scanf("%d%d",&a,&b);//输入的两个链表元素数量 node head1=creat(a);//创造两个链表 ,head1,2为头节点 node head2=creat(b); unite(head1,head2);//结合两个链表 order(head1,a+b);//排序两个链表 return 0; } node creat(int n){ node head=(node)malloc(sizeof(Node));//head为头结点 ,尾插创造 head->next=NULL; node p=head;//p为头指针 for(int i=0;i<n;i++){ node q=(node)malloc(sizeof(Node)); q->next=NULL; p->next=q; p=q; scanf("%d%d",&(*q).num&(*q).grade); } return head; } void unite(node head1,node head2){ node p; p=head1; while(p->next!=NULL) p=p->next; p->next=head2->next; head2->next=NULL; } void order(node head,int sum){ node p=head->next;//p指向首结点 int t1,t2;//t1学号中间变量,t2成绩中间变量 int cnt=0;//cnt为链表长度,这里选用冒泡排序 while(cnt<sum){ node q=p; while(q->next!=NULL){ if((q->num)>(q->next->num)){ t1=q->num; q->num=q->next->num; q->next->num=t1; t2=q->grade; q->grade=q->next->grade; q->next->grade=t2; } q=q->next; } cnt++; } output(head); } void output(node head){ node p=head->next; node q; while(p!=NULL){ printf("%d %d\n",p->num,p->grade); q=p; p=p->next; free(q); } }