美文网首页
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