解题思路:
注意事项:
参考代码:
#include<stdio.h>
#include<stdlib.h>
void createListL();
typedef struct Node
{
int a;//表示系数
int b;//表示指数
struct Node *next;
}Node,*LinkList;
void display(LinkList L)//输出合并后的L链表
{
Node *p;
p=L->next;
while(p!=NULL)
{
while(p->a==0)
p=p->next;
printf("%d %d ",p->a,p->b);
p=p->next;
}
printf("\n");
}
void add(LinkList L,LinkList S)
{
Node *p,*q,*t=L;
Node *m=(Node *)malloc(sizeof(Node));
p=L->next;
q=S->next;
while(q!=NULL)//对S链表的结点进行遍历
{
while(q->b<p->b&&p->next!=NULL)//对指数进行比较,直到q的指数大于或小于p的指数则跳出循环
{
p=p->next;
t=t->next;
}
if(q->b==p->b)//当指数相等时,系数相加
{
p->a=p->a+q->a;
}
else if(q->b>p->b)//当q的指数大于p的指数时,创建一个新结点即m,把q的值赋给m,并插入到p的前一个结点
{
m->a=q->a;
m->b=q->b;
t->next=m;
m->next=p;
t=t->next;
}else//如果遍历到p的最后一个结点时,即p->next==NULL,将新节点m插入此时p的下一个结点
{
m->a=q->a;
m->b=q->b;
p->next=m;
m->next=NULL;
}
q=q->next;
}
display(L);//合并完后输出结果
}
LinkList createListS(LinkList L)
{
int i,j;
char k;
Node *S=(Node *)malloc(sizeof(Node));
S->next=NULL;
Node *tail=S;
while(~scanf("%d %d",&i,&j))
{
k=getchar();
Node *p=(Node *)malloc(sizeof(Node));
p->a=i;
p->b=j;
p->next=tail->next;;
tail->next=p;
tail=tail->next;
if(k!=' ')//若输入S链表后没有任何输入,就执行add()子函数
{
add(L,S);//将S合并到L,最终输出L,即为一元多项式结果
createListL();//可再次创建L,实现计算多组数据
}
}
}
void createListL()
{
int i,j;
char k;
Node *L=(Node *)malloc(sizeof(Node));
L->next=NULL;
Node *tail=L;
while(~scanf("%d %d",&i,&j))
{
k=getchar();
Node *p=(Node *)malloc(sizeof(Node));
p->a=i;
p->b=j;
p->next=tail->next;
tail->next=p;
tail=tail->next;
if(k=='\n')
{
createListS(L);//L链表创建后,建立S链表,即第二行输入
}
}
}
void main()
{
createListL();//创建第一行,即L链表
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复