原题链接:[编程入门]链表合并
解题思路:
注意事项:
结构体使用,结构体指针
参考代码:
#include<stdio.h>
#include<malloc.h>
typedef struct Node {
int sno;
int sc;
struct Node* next;
}node, * LinkList;
LinkList L,La,lc;
InitList(LinkList* L) {
*L = (LinkList)malloc(sizeof(node)); //建立头结点
(*L)->next = NULL; //建立空的单链表L
}
void CreateFromHead(LinkList L,int flag) {
node* s;
int c;
int n;
int f=0;
while (f<flag) {
scanf("%d", &n);
scanf("%d", &c);
f++;
//if (c != 0) {
s = (node*)malloc(sizeof(node));//建立新结点
s->sc = c;
s->sno=n;
s->next = L->next; //将s结点插入表头
L->next = s;
// }
}
}
void OutputList(LinkList L) {
if (L->next == NULL) {
printf("空表!");
}
else {
node* p;
p = L->next;
while (p) {
printf("%d %d\n", p->sno,p->sc);
p = p->next;
}
}
}
/*升序排序*/
void AscSort(LinkList L) {
node* s, * pre, * p, * temp;
//if (L->next == NULL)
// return ERROR;
s = L->next->next;
L->next->next = NULL;
while (s != NULL) {
pre = L;
p = L->next;
while (p && s->sno > p->sno) {
pre = p;
p = p->next;
}
temp = s->next;
pre->next = s;
s->next = p;
s = temp;
}
}
void hb(LinkList l1,LinkList l2){
// printf("l3:");
node *pa,*pb,*r;
LinkList l3;
pa=l1->next;
pb=l2->next;
l3=l1;
l3->next=NULL;
r=l3;
while(pa!=NULL&&pb!=NULL){
if(pa->sno<pb->sno){
r->next=pa;r=pa;pa=pa->next;
}
else{
r->next=pb;r=pb;pb=pb->next;
}
}
if(pa)
r->next=pa;
else
r->next=pb;
free(l2);
//printf("l3:");
OutputList(l3);
// return (l3);
}
int main()
{
InitList(&L);
InitList(&La);
int flag;
int a;
scanf("%d",&flag);
scanf("%d",&a);
CreateFromHead(L,flag);
CreateFromHead(La,a);
AscSort(L);
AscSort(La);
//OutputList(L);
//printf("\n");
//OutputList(La);
//printf("l3:\n");
hb(L,La);
return 0;
} 0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复