LeetCode2. 两数相加(C++)

*** 之前想的每天刷刷题,写写博客,现在回头看看发现自己很久没有好好写算法题,也没有更新博客了。既然选择了做一个技术人员,一定的内容输出是有必要的。
这会儿刚好比较清闲,兴致来了,打开leetcode和CSDN写点东西~~
不知道从哪开始写,那就从开头写咯!***

两数相加
题目说明:
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

细看题目要求还是比较简单,把两个数相加,这里是两个链表从头到尾对应结点相加,应注意之和可能进位,因为结果的数位可能大于这两数本身,所以构建新结点来存放结果。

//以下是本人leetcode源代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* dummy = new ListNode(-1), *p = dummy;
        //dummy作为头结点,p用来遍历新链表的各个结点
        int tmp = 0;//记录结点相加后的整数位
        while(l1 || l2 || tmp){//只要其中一个不为空循环就继续执行
            if(l1){
                tmp += l1->val;
                l1 = l1->next;
            }
            if(l2){
                tmp += l2->val;
                l2 = l2->next;
            }
            p->next = new ListNode(tmp%10);//构建新结点,余数即为结点的值
            p = p->next;
            tmp /= 10;//取得进位值
        }
        return dummy->next;
    }
};

你可能感兴趣的:(算法题,leetcode,c++,链表)