给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

输入:

2,4,3

5,6,4

输出:

7,0,8

#include<bits/stdc++.h>
using namespace std;


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


void create(LinkList &L,int a[])

{L=new LNode;

LNode *temp=L;int i;

L->next=NULL;
 i=0;
while(a[i]!=-1)

{
	LNode *p=new LNode;
	p->data=a[i];
	p->next=temp->next;
	temp->next=p;
	temp=p;
    i++;
}

}



void xiangjia(LinkList &L1,LinkList &L2,LinkList &L3)
{int flag=0,i;
 LinkList p1=L1->next;
 LinkList p2=L2->next;
 LinkList p;
 L3=new LNode;
 L3->next=NULL;
 p=L3;
 while(p1&&p2)
 {LinkList q=new LNode;
 q->next=NULL;
 p->next=q;
 p=q;
 p->data=(p1->data+p2->data+flag)%10;
 flag=(p1->data+p2->data+flag)/10;
 p1=p1->next;
 p2=p2->next;}
 if(p1!=NULL&&p2==NULL)
 {while(p1)
 {LinkList q=new LNode;
 q->next=NULL;
 p->next=q;
 p=q;
 p->data=(p1->data+flag)%10;
 flag=(p1->data+flag)/10;
 p1=p1->next; 
 }}
 if(p2!=NULL&&p1==NULL)
 {while(p2)
 {LinkList q=new LNode;
 q->next=NULL;
 p->next=q;
 p=q;
 p->data =(p2->data+flag)%10;
 flag=(p2->data+flag)/10;
 p2=p2->next; 
 }}
 if(flag==1)
 {LinkList q=new LNode;
 q->next=NULL;
 q->data=1;
 p->next=q;}
}

void putout(LinkList L3)
{LinkList p;
p=L3->next;
while(p->next)
{printf("%d,",p->data);
p=p->next;}
printf("%d",p->data);
}


int main() {
int a[50],b[50];
char c[50],d[50];
cin>>c;int i=0,h,j=0;
memset(a,-1,sizeof(a));
memset(b,-1,sizeof(b));
 for(h=0;;h++)
 {
 a[j]=c[i]-'0';	
 i++;j++;
 if(c[i]!=',')
 break;
 else i++;
 }
 cin>>d;i=0;
 j=0;
 for(h=0;;h++)
 {
 b[j]=d[i]-'0';	
 i++;j++;
 if(d[i]!=',')
 break;
 else i++;
 }
 LinkList L1,L2,L3;
 create(L1,a);
 create(L2,b);
 xiangjia(L1,L2,L3);
 putout(L3);
 return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值