考察知识点: 链表、大数加法、模拟
题目分析:
链表中低位排在前,可以模拟我们在生活中加法的计算方法,从个位开始加起,得到的新的数中的每一位都是两个数中对应数位的和再加上进位t
。
例如:54321 + 9876 = 64197
计算过程如下:
注意在最后要判断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;
}
};