给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
思路:1、设置一个进位标志overload;每一位的和 sum=l1->val+l2->val+overload;
2、如果这个和大于10的话 就sum%=10;overload =1;更新这个和,并且进位标志改为1;
3、如果不大于10;sum不变,overload=0;
4、把这个值赋给链表;并且更新链表的下一个位置;pCurrent=ListNode(sum);pCurrent=pCurrent->next;
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{
ListNode* pHead=new ListNode(0);
ListNode *pCurrent=pHead;
int overload=0;//是不是有进位;有进位为1;
while(l1||l2||overload)
{
int sum=(l1?l1->val:0)+(l2?l2->val:0)+overload;//某一位的值为l1/l2的值加上进位的值;
if(sum>=10)//如果这个和大于10
{
sum%=10;//更新这个值
overload=1;//并且产生进位;
}
else
overload=0;
pCurrent->next=new ListNode(sum);//将当前的值赋给第一位;也就是个位数;
pCurrent=pCurrent->next;//当前的位置往下进行;也就是十位数
if(l1) l1=l1->next;//l1链表往后遍历;
if(l2) l2=l2->next;//l2链表往后遍历;
}
return pHead->next;
}
};