LeetCode-2:
给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
/*两数相加,单向链表,高位在链表尾端*/
struct ListNode
{
int val;
struct ListNode *next;
}ListNode;
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
{
int flag=0;//进位标志
int sum=0;
struct ListNode *head=NULL;
struct ListNode *p=NULL;
struct ListNode *p_end=NULL;
struct ListNode *p_L1=l1;
struct ListNode *p_L2=l2;
for(p_L1;p_L1!=NULL;p_L1=p_L1->next)
{
p=(struct ListNode*)malloc(sizeof(struct ListNode));
if(head==NULL)
head=p;
if(p_end==NULL)
{
p_end=p;
p_end->next=NULL;
}
else
p_end->next=p;
if(p_L2!=NULL)
{
sum=p_L1->val+p_L2->val+flag;
p_L2=p_L2->next;
p->val=sum%10;
flag=sum/10;
p_end=p;
}
else
{
sum=p_L1->val+flag;
p->val=sum%10;
flag=sum/10;
p_end=p;
}
}
for(p_L2;p_L2!=NULL;p_L2=p_L2->next)
{
p=(struct ListNode*)malloc(sizeof(struct ListNode));
if(head==NULL)
head=p;
if(p_end==NULL)
{
p_end=p;
p_end->next=NULL;
}
else
p_end->next=p;
sum=p_L2->val+flag;
p->val=sum%10;
flag=sum/10;
p_end=p;
}
if(flag)
{
p=(struct ListNode*)malloc(sizeof(struct ListNode));
p_end->next=p;
p->val=flag;
p_end=p;
}
p_end->next=NULL;
return head;
}