[Leetcode]_2 Add Two Numbers

/**
 *  Index: 2
 *  Title: Add Two Numbers
 *  Author: ltree98
 **/

很基础..
合并l1 和 l2

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {      
        ListNode* lnTemp = new ListNode(0);
        ListNode* ori = lnTemp;
        int op = 0;

        while( l1 || l2 || op )   {
            int sum = op;
            if(l1)  {
                sum += l1->val;
                l1 = l1->next;
            }
            if(l2)  {
                sum += l2->val;
                l2 = l2->next;
            }

            op = sum/10;
            lnTemp->next = new ListNode(sum%10);
            lnTemp = lnTemp->next;
        }
        return ori->next;
    }
};

用更少的空间,
一个记录初始地址结构体,一个进位值,一个补足进位结构体。
将所有的数都加在l1上,如果l2比l1长
=> l1->next = l2->next (将l2后半部分并到l1)

class Solution {
public:
    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
        ListNode *ori = l1;
        int op = 0;

        while (true) {
            l1->val += (l2->val + op);
            op = l1->val/10;
            l1->val %= 10;

            if (!l1->next) {
                l1->next = l2->next;
                break;
            }
            else if (!l2->next)
                break;

            l1 = l1->next;
            l2 = l2->next;
        }

        while (l1->next && op) {
            l1 = l1->next;
            op = (l1->val += op)/10;
            l1->val %= 10;
        }

        if (op)
            l1->next = new ListNode(op);

        return ori;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值