/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
//初始化头和尾(yǐ)巴
struct ListNode*head=NULL;
struct ListNode*end=NULL;
//定义一个增加节点的函数
void addlist(int a)
{
struct ListNode*ptemp=(struct ListNode*)malloc(sizeof(struct ListNode));
ptemp->val=a;
ptemp->next=NULL;
if(head==NULL||end==NULL)
{
head=ptemp;
end=ptemp;
}
else
{
end->next=ptemp;
end=ptemp;
}
}
void freelist()
{
struct ListNode*ptemp=head;
while(ptemp!=NULL)
{
struct ListNode*pt=ptemp;
ptemp=ptemp->next;
free(pt);
}
head=NULL;
end=NULL;
}
//思路就是吧这个挨个提出来
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
freelist();
struct ListNode*pt1=l1;
struct ListNode*pt2=l2;
int a=0;
int b=0;
int c=0;
while(pt1!=NULL||pt2!=NULL)
{
if(pt1!=NULL&&pt2!=NULL)
{
a=pt1->val;
b=pt2->val;
if(c==0)
{
if(a+b<10){
addlist(a+b);
c=0;
}
else if (a+b>=10)
{
addlist((a+b)%10);
c=1;
}
}
else if(c==1)
{
if(a+b+c<10){
addlist(a+b+c);
c=0;
}
else if(a+b+c>=10)
{
addlist((a+b+c)%10);
c=1;
}
}
pt1=pt1->next;
pt2=pt2->next;
}
else if (pt1!=NULL&&pt2==NULL)
{
a=pt1->val;
if(a+c<10){
addlist(a+c);
c=0;
}
else if(a+c>=10)
{
addlist((a+c)%10);
c=1;
}
pt1=pt1->next;
}
else if(pt2!=NULL&&pt1==NULL)
{
b=pt2->val;
if(b+c<10)
{
addlist(b+c);
c=0;
}
else if(b+c>=10)
{
addlist((b+c)%10);
c=1;
}
pt2=pt2->next;
}
}
if(c==1)
{
addlist(1);
return head;
}
return head;
}