#include<stdio.h>
#include<stdlib.h>


typedef struct node{
 struct node *next;
 int num;
 int exp;}data;


data *creatlist(int *a,int n)      //尾插法创建链表
{
 data *head,*p,*q;
 int i;
 head=p=(data *)malloc(sizeof(data));

 for(i=0;i<n-1;i=i+2)            //注意
 {
 q=(data *)malloc(sizeof(data));
 q->num=a[i];
 q->exp=a[i+1];
 p->next=q;
 p=q;
 }

 p->next=NULL;
 return head;
}


void fun(char *s,int *a,int *n)      //将字符串中的正数,负数,0转化为int型
{
 int sum,k=0;

 while(*s)
 {
  if(*s=='-')
  {
  sum=0;
  s=s+1;

  while(*s>='0'&&*s<='9')
  {
   sum=sum*10+*s-48;
   s++;
  }
  a[k++]=-sum;
  }

  else if(*s>='0'&&*s<='9')
  {
  sum=0;

  while(*s>='0'&&*s<='9')
  {
   sum=sum*10+*s-48;
   s++;
  }

  a[k++]=sum;
  }

  else
   s++;
 }
 *n=k;
}


void merge(data *head,data *head1)   //合并链表
{
 data *p,*q,*pa;
 pa=head;
 p=pa->next;
 q=head1->next;

 while(p&&q)
 {
  if(p->exp>q->exp)
  {
   pa->next=p;
   pa=p;
   p=p->next;
  }

  else if(p->exp<q->exp)
  {
   pa->next=q;
   pa=q;
   q=q->next;
  }

  else
  {
   pa->next=p;
   pa=p;
   pa->num=pa->num+q->num;
   p=p->next;
   q=q->next;
  }
 }
 pa->next=p?p:q;


void outlist(data *head)
{
 data *pa;

 for(pa=head->next;pa;pa=pa->next)
 {
  if(pa->num!=0)
  printf("%d %d ",pa->num,pa->exp);
 }
 putchar('\n');
}


int main()
{
 char ch[200],s[200];
 int a[100],b[100],k,n;
 data *head,*head1;

 while(gets(ch)!=NULL)
 {
  fun(ch,a,&k);
  head=creatlist(a,k);

  gets(s);
  fun(s,b,&n);
  head1=creatlist(b,n);

  merge(head,head1);
  outlist(head);
 }
 return 0;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论