leetcode 2 AddTwoNumbers

题目描述:
在这里插入图片描述

给定两个非空的链表,要求从头将两个列表中的值相加,并将结果存储到另一个列表中。
在这里插入图片描述
这里主要处理的一个问题就是两个数相加的进位问题!我们直到列表中元素的取值范围在[0−9][0 - 9][09],那么最大的两个元素相加9+9=189+9=189+9=18,这时进位为1,所以可以看出进位的取值范围为[0,1][0, 1][01]

AC代码:

class Solution{
public:

    //法1
    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2){
        //存储一个存储结果的列表,初始化头部为-1
        ListNode *res = new ListNode(-1);
        //cur指向列表的头部
        ListNode *cur = res;
        //初始化进位为0
        int carry = 0;
        //遍历l1和l2,直到全部为空
        while (l1 != NULL || l2 != NULL){
            //相加
            int n1 = l1 ? l1->val : 0;
            int n2 = l2 ? l2->val : 0;
            int sum = n1 + n2 + carry;
            //更新进位,若sum > 10,则carry = 1 
            carry = sum / 10;
            //将取余的结果存储到新节点中
            cur->next = new ListNode(sum % 10);
            //指针后移
            cur = cur->next;
            //当不为空时,指针后移,继续运算
            if (l1)
                l1 = l1->next;
            if (l2)
                l2 = l2->next;
        }
        //计算最后一位时,若存在进位,则添加新的节点
        if (carry)
            cur->next = new ListNode(1);
        return res->next;
    }

参考:

Add Two Numbers 解题报告 (https://blog.youkuaiyun.com/crazy1235/article/details/52914703)
[Add Two Numbers Solution](https://leetcode.com/problems/add-two-numbers/solution/)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值