美文网首页
Leetcode链表easy | 2.两数相加

Leetcode链表easy | 2.两数相加

作者: Ivan_Lan | 来源:发表于2018-11-23 15:00 被阅读24次

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

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

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

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

/**
 * 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=nullptr,*current;   //  Ret 是新链表的头指针,current为新链表的动态指针
        int sum, num=0; // sum为两数之和,num为进位
        while(l1&&l2){  
            sum = l1->val+l2->val+num;   //  两数相加加进位,进位初始化为0
            ListNode *node = new ListNode(sum%10);   // 新建节点,初始化的值为余数
            num = sum/10;  // 计算进位
            Ret?current->next=node:Ret=node;   //  Ret指针初始化为空,第一次将Ret 指向新建立的链表,后续是新建节点接在链表后面
            current = node;  // 新链表的动态移动到新建立的节点
            l1=l1->next;  // 原有链表的指针移动
            l2=l2->next;
        } //  计算等长部分;
        
        if(l2)   //  不等长部分;统一到l1指针
            l1=l2;
        while(l1){   // 计算方法类似
            sum = l1->val+num;
            ListNode *node =new ListNode(sum%10);
            num = sum/10;
            current->next = node;
            current = node;
            l1=l1->next;
        }
        
        if(num){   
            ListNode* node = new ListNode(num);
            current->next =node;
        }  //  最后可能还有进位
        
        return Ret;  //  返回新链表的头指针
        
    }
};

相关文章

网友评论

      本文标题:Leetcode链表easy | 2.两数相加

      本文链接:https://www.haomeiwen.com/subject/peujqqtx.html