两个整数求和(链表)
创始人
2024-01-22 13:08:05
0

问题描述 

【问题描述】

给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。

输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295

输出:2 -> 1 -> 9,即912

【输入形式】

第一行输入第1个整数(逆序);

第二行输入第2个整数(逆序);

每个数位以空格分隔。

【输出形式】

输出和的逆序。

【样例输入】

7 1 6 e

5 9 2 e

【样例输出】

2 1 9

【样例说明】

样例中的e,表示输入以非法整数作为输入结束;

两个整数的位数不一定相同,即有可能1+11111

也可能会出现,某个整数不存在的情况(即链表为空链的情况)

【评分标准】

不允许修改程序其他结构,只补充加法函数。

程序设计 

#include
#include

typedef  int ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

LinkList initList()
{
    LinkList head;
    head=(LinkList)malloc(sizeof(LNode));
    if(head==NULL)
    {
        return NULL;
    }
    head->next=NULL;
    return head;
}
//在链表末尾插入结点,并返回尾指针
LinkList insertListTail(LinkList tail, ElemType e)
{
    LinkList s;
    if(tail==NULL)
    {
        return 0;
    }
    s=(LinkList)malloc(sizeof(LNode));
    if(s==NULL)
    {
        return 0;
    }
    s->data=e;
    s->next=tail->next;
    tail->next=s;
    tail=s;
    return tail;
}
void printList(LinkList head)
{
    LinkList p=head->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}
//函数返回结果链表
LinkList addList(LinkList ha,LinkList hb)
{
    int x=0,y=0,i=0,j=0,k;
    int a[100],b[100];
    LinkList p,q,hc,s;
    p=ha->next;
    q=hb->next;
    if(p==NULL) return hb;
    if(q==NULL) return ha;
    while(p){
        a[i++]=p->data;
        p=p->next;
    }
    i--;
    while(i>=0){
        x=x*10+a[i];
        i--;
    } 
    while(q){
        b[j++]=q->data;
        q=q->next;
    }
    j--;
    while(j>=0){
        y=y*10+b[j];
        j--;
    }
    hc=(LinkList)malloc(sizeof(LNode));
    hc->next=NULL;
    s=hc;
    int sum=x+y;
    while(sum){
        LinkList r=(LinkList)malloc(sizeof(LNode));
        r->next=NULL;
        r->data=sum%10;
        sum=sum/10;
        s->next=r;
        s=r;
    }
    return hc;
}
int main()
{
    LinkList ha,ta,hb,tb,hc;
    ElemType e;
    ta=ha=initList();
    tb=hb=initList();
    while(scanf("%d",&e)==1){
        ta=insertListTail(ta,e);
    }
    getchar();
    while(scanf("%d",&e)==1){
        tb=insertListTail(tb,e);
    }
   // printList(ha);
   // printList(hb);
    hc=addList(ha,hb);
    printList(hc);
    return 0;

 

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...