LeetCode 2. 两数相加

早过忘川 提交于 2019-12-05 12:35:38

LeetCode 2.两数相加


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

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

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

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers

/**
 * 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* result = new ListNode(0);//结果的头指针
        ListNode* tail = new ListNode(0);//链表的尾指针
        int num = l1->val+l2->val;//当前的结果
        int a = num/10;//进位
        int b = num%10;//当前位置的值
        tail->val = b;
        result = tail;
        
        while(l1->next!=NULL || l2->next!=NULL || a!=0)
        {
            ListNode* temp = new ListNode(0);//当前指针
            if(l1->next == NULL)
            {
                l1->next = new ListNode(0);
                l1 = l1->next;
                l1->val = 0;
            }
            else
                l1 = l1->next;
            if(l2->next == NULL)
            {
                l2->next = new ListNode(0);
                l2 = l2->next;
                l2->val = 0;
            }
            else
                l2 = l2->next;
            num = l1->val + l2->val + a;
            a = num/10;
            b = num%10;
            temp->val = b;
            tail->next = temp;
            tail = tail->next;
        }
        return result;
    }
};

运行结果显示

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!