输入:l1 = [2,4,3],l2 = [5,6,4]
输出:[7,0,8]
题意:输入两个链表,计算链表逆序相加的结果的逆序。即342 + 465 = 807.
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
// 进位数
int m = 0;
// 结果链表的头尾指针
ListNode *head=nullptr, *tail=nullptr;
while(l1 || l2){
// 获取链表某一位的值
int t1 = l1 ? l1->val : 0;
int t2 = l2 ? l2->val : 0;
// 加起来
int sum = t1 + t2 + m;
// 进位别忘了
m = sum/10;
// 值插入结果链表
if(head==NULL){
head = tail = new ListNode(sum%10);
}else{
tail->next = new ListNode(sum%10);
tail = tail->next;
}
// 对循环中遍历指针的处理
if(l1){
l1 = l1->next;
}
if(l2){
l2 = l2->next;
}
}
// 如果最高位还有进位,这个情况容易忘
if(m!=0){
tail->next = new ListNode(m);
}
return head;
}
};