LeetCode 3 两数相加

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

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

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

示例:

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



解题思路:
从链表头开始, 依次相加, 然后每次判断需不需要进位, 如果需要进位, 使用carry 记录值为1 .
并将当前位对10 取余
注意两个链表不一样长, 其中一个链表为空, 最后一位相加超出链表长度 这三种情况.

代码:
    ListNode* Sumlist = new ListNode(0);
    ListNode *p1 = l1, *p2 = l2 ,*curr=Sumlist;
    int carry = 0;
    //两个链表不一样长, 必须同时为空退出循环
    while (p1!=NULL||p2!=NULL)
    {
        //如果一个链表为空, 则值等于0
        int x = (p1 != NULL) ? p1->val : 0;
        int y = (p2 != NULL) ? p2->val : 0;
        //每次都要加上进位.
        int sum = x + y+carry;
            carry = sum / 10;
            sum = sum % 10;
        curr->next = new ListNode(sum);
        curr = curr->next;
        
        p1 = (p1 != NULL) ? p1->next : NULL;
        p2 = (p2 != NULL) ? p2->next : NULL;
    }
    //循环结束时, 还有进位.则往下多加一个链表
    if (carry > 0)
    {
        curr->next = new ListNode(carry);
    }
    return Sumlist->next;


原文地址:https://www.cnblogs.com/derek-dhw/p/10477295.html