原题链接
思路
原题描述的意思就是将一个数字从个位到最高位表达出来,然后分别利用每一个位数进行相加,同时需要注意引入一个进位表达 t t t,初始化为 0 0 0。然后不断循环每一个位,直到两个链表都是空,同时进位项也是 0 0 0终止。对于每一个位的相加,需要判断两个链表是否有当前位,如果有,那么就需要加上这个值,没有就跳过,结果链表中每一个位是当前和对 10 10 10取余,进位项是对10做整除。
代码
/**
* 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) {
// 定义一个虚拟头节点,可以省略特殊情况的判断
auto dummy = new ListNode(-1), cur = dummy;
int t = 0;
// l1,l2,t中有一个不为空,就继续计算
while(l1 || l2 || t){
if(l1) t += l1->val, l1 = l1->next;
if(l2) t += l2->val, l2 = l2->next;
cur->next = new ListNode(t % 10);
// 更新尾节点
cur = cur->next;
t = t / 10;
}
return dummy->next;
}
};