您的位置:首页 > 其它

leetCode 第二题 两个数的和

2018-04-07 00:19 204 查看
给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。你可以假设除了数字 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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: