两数相加

in 知识共享 with 0 comment

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

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

 

示例 1:
addtwonumber1.jpg

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]

示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

提示:

每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零

本人提交代码

/**
 * 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* ret = new ListNode(0);
        ListNode* root = l1;
        ListNode* root1 = l2;
        int add = 0;

        ListNode* curr = ret;
        while ( root || root1 )
        {
            int val = (root ? root->val : 0) + (root1 ? root1->val : 0) + add;
            if ( val > 9 )
            {
                curr->val = val % 10;
                add = 1;
            }
            else
            {
                curr->val = val;
                add = 0;
            }

            root = root ? root->next : NULL;
            root1 = root1 ? root1->next : NULL;
            
            if ( root || root1 )
            {
                curr->next = new ListNode(0);
                curr = curr->next;                
            }
        }

        if ( add > 0 )
        {
            curr->next = new ListNode(1);
        }
        return ret;
    }
};
Responses