解题思路:  这数据输入,每行的最后一个字符是'\n',但是最后一行的最后一个字符是啥不知道,反正不是空格,也不是换行。

注意事项:  贴的代码乱乱的,去这看吧:https://www.dotcpp.com/run/13388639


参考代码:

#include <stdio.h>

#include <stdlib.h>


typedef struct _node{

int value;

int factor;

struct _node *next;

}node;


void add_one(node **phead,int v,int f);

void show(node *head);

void free_all(node **phead);

void together(node **phead1,node **phead2);


int main()

{

node *head1 = NULL;

node *head2 = NULL;

int v,f;char isend;

int first;

while(~scanf("%d %d",&v,&f))

{

isend = getchar();

first = 0;

do{

if(first) 

{

scanf("%d %d",&v,&f);

isend = getchar();

}

else first = 1;

add_one(&head1,v,f);

}while(isend!='\n'); 

isend = '\0';

while(isend!='\n')

{

scanf("%d %d",&v,&f);

isend = getchar();

add_one(&head2,v,f);

if(isend!=' ') break;

}

together(&head1,&head2);

free_all(&head1);

}

return 0;


void add_one(node **phead,int v,int f)

{

node *p = *phead;

node *a = (node*)malloc(sizeof(node));

a->value = v;a->factor = f;

a->next = NULL;

if(!p) *phead = a;

else

{

while(p->next)

p=p->next;

p->next = a;

}

}


void show(node *head)

{

node *p = head;

while(p->next)

{

if(p->value!=0)

printf("%d %d ",p->value,p->factor);

p=p->next;

}

if(p->value!=0)

printf("%d %d \n",p->value,p->factor);

}


void free_all(node **phead)

{

node *p = *phead;

while(p)

{

node *rem = p;

p=p->next;

free(rem);

}

*phead = NULL;

}


void together(node **phead1,node **phead2)

{

node *p1 = NULL;

node *p2 = NULL;

    if((*phead1)->factor>=(*phead2)->factor)

    {

        p1 = *phead1;

        p2 = *phead2;

    }

    else

    {

        p1 = *phead2;

        p2 = *phead1;

    }

    node *p1copy = p1;

    node *p2next = NULL;

    node *p1pre = NULL;

    int isok = 1;

    

    while(p2 && isok)

    {

        while(p1->factor>p2->factor)

        {

            p1pre = p1;

            p1 = p1->next;

            if(!p1)

            {

                p1pre->next = p2;

                isok = 0;

                break;

            }

        }

        if(isok)

        {

            if(p1->factor==p2->factor)

            {

                p1->value += p2->value;

                node *buf = p2;

                p2 = p2->next;

                free(buf);

            }

            else

            {

                p2next = p2->next;

                p1pre->next = p2;

                p2->next = p1;

                p2 = p2next;

            }

        }

    }

    show(p1copy);

    *phead2 = NULL;

}


点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论