解题思路:先定义一个带指针的结构体,然后定义一个创建链表的函数,一个连接两个链表的函数,一个排序并删除重复的函数,总的来说这就是链表的创建、合并和删除.
注意事项:1.链表创建函数中,链表创建结束的结构体中的结构体指针得赋成NULL,链表结束字符。
2.链表排序和删除时,应该free()掉重复的结构体
参考代码:
#include<stdio.h>
#include<stdlib.h>
//声明模块
typedef struct students{
int Id;
int score;
struct students *next;
}Stu;
Stu *creatl(int n);
void linkS(Stu *x1, Stu *x2);
void sort(Stu *x);
//主函数模块
int main()
{
int n, m;
scanf("%d %d", &n, &m);
Stu *head_a;
Stu *head_b;
head_a = creatl(n);
head_b = creatl(m);
linkS(head_a, head_b);
sort(head_a);
Stu *head;
head = head_a->next;
while (head!=NULL)
{
printf("%d %d\n", head->Id, head->score);
head = head->next;
}
free( head_a);
free( head_b);
free( head);
return 0;
}
//链表创建函数
Stu *creatl(int n)
{
Stu *head, *node, *end;
head = (Stu *)malloc(sizeof(Stu));
end = head;
for (int i = 0; i < n; i++)
{
node = (Stu *)malloc(sizeof(Stu));
scanf("%d %d", &node->Id, &node->score);
end->next = node;
end = node;
}
end->next = NULL; //链表结束指针字符
return head;
}
//链表连接函数
void linkS(Stu *x1,Stu *x2)
{
while (1)
{
if (x1->next == NULL)
{
x1->next = x2->next;
break;
}
x1 = x1->next;
}
}
//链表排序并删除重复序号函数函数
void sort(Stu *x)
{
Stu *pt, *pr;
int a, b;
for (pt = x; pt != NULL; pt = pt->next)
{
for (pr = pt->next; pr != NULL; pr = pr->next)
{
if (pt->Id > pr->Id)
{
a = pt->Id;
b = pt->score;
pt->Id = pr->Id;
pt->score = pr->score;
pr->Id = a;
pr->score = b;
}
}
}
}
实测通过
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复