考察知识点: 链表、大数加法、模拟

题目分析:

 链表中低位排在前,可以模拟我们在生活中加法的计算方法,从个位开始加起,得到的新的数中的每一位都是两个数中对应数位的和再加上进位t

例如:54321 + 9876 = 64197

alt

计算过程如下:

alt

 注意在最后要判断t的值,如果t的值大于0,那么需要创建一个新的结点(增加一个数位)

所用编程语言: C++

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param l1 ListNode类 
     * @param l2 ListNode类 
     * @return ListNode类
     */
    ListNode* addEnergyValues(ListNode* l1, ListNode* l2) {
        // write code here
        int t = 0;
        int lenl1 = 0, lenl2 = 0;  //为了使l1指向数位较大的数
        ListNode *p;
        for (p = l1; p; p = p->next) lenl1++;
        for (p = l2; p; p = p->next) lenl2++;
        if (lenl2 > lenl1) swap(l1, l2);

        ListNode *head = l1;
        ListNode *tail = nullptr;
        while (l1) {
            int sum = l1->val + t;
            if (l2) {
                sum += l2->val;
                l2 = l2->next;
            }
            l1->val = sum % 10;
            t = sum / 10;
            tail = l1;
            l1 = l1->next;
        }
        if (t) {
            auto n = new ListNode(t);
            tail->next = n;
            tail = tail->next;
        }
        return head;
    }
};