LeetCode002-两数相加(Add Two Numbers)

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

思路

根据博客大佬的代码写的,学习使用。
从链表的左边(也就是数字的低位开始),两个链表对应位置的数分别相加,若两数相加之和产生进位carry(>10),则需要往高一位进1,则高位不仅仅是两个数,还要加上低位产生的进位carry。以此进行下去。

代码

struct ListNode
{
    int val;
    ListNode *next;
    //构造函数,用来赋值
    ListNode(int x) {
        val = x;
    }
//    ListNode(int x) : val(x), next(NULL) {}   //这个也是构造函数,与上句作用相同,用来赋值
};
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
    ListNode *tmp=NULL;
    ListNode *result=NULL;
    int carry=0;   //设置进位
    //或运算也包含了l1和l2数位不一样的情况
    while(l1 !=NULL || l2!=NULL || carry!=0)
    {
        int sum=(l1==NULL?0:l1->val)+(l2==NULL?0:l2->val)+carry;
        carry=sum/10;

        ListNode *node = new ListNode(sum % 10);   //构造函数产生新的节点,并进行赋值
        node->val=sum%10;
        //依次连接存放结果的节点,形成链表
        if(tmp==NULL)
        {
            tmp=node;
            result=tmp;
        } else
        {
            tmp->next=node;
            tmp=tmp->next;
        }
        l1= l1==NULL ? 0:l1->next;
        l2= l2==NULL ? 0:l2->next;
    }
    return result;

Come On!Man

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值