【LeetCode】2.两数相加 结题报告 (C++)

题目地址:https://leetcode-cn.com/problems/add-two-numbers/description/

问题描述:

给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。

你可以假设除了数字 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 *result = new ListNode(0);
            ListNode *tmp = result;
            int sum = 0;
            while(l1 || l2){      
                if(l1){
                    sum += l1->val;
                    l1 = l1->next;
                }
                if(l2){
                    sum += l2->val;
                    l2 = l2->next;
                }
                tmp->next = new ListNode(sum%10);
                sum /= 10;
                tmp = tmp->next;
            }
            if(sum)
                tmp->next = new ListNode(1);
            return result->next;
        }
    };

这里牺牲了头节点。

C++构造函数挺有意思的,多学习。
---------------------
作者:暮雨凉初透
来源:CSDN
原文:https://blog.csdn.net/qq_32805671/article/details/79883391
版权声明:本文为博主原创文章,转载请附上博文链接!

posted @ 2019-07-06 11:20  天涯海角路  阅读(127)  评论(0)    收藏  举报