参考官方题解
//题意:给两个链表,每个链表表示的是倒序输入的两个数,例如[1,2,3] [1,2,3]。然后要求求出
//两个链表的和并且以链表的方式返回。例如[2,4,6];表示123 + 123 = 246;
//思路:跟归并排序的思路一致,依次将对应位置的数字相加,然后注意进位。直到一个链表的元素循环完毕,
//然后就将后面的都加到新的链表的尾部就行了。
/**
* 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 *head = nullptr,*tail = nullptr;//头指针跟尾指针都置为0
int jinwei = 0;//用来记录每次的进位。
while(l1||l2){//当两个链表都为空就跳出循环,否则把长的链表的后续全部赋值到新链表的尾部
int n1 = l1 ? l1->val:0;//如果指向不为空就拿出当前值,否则就置为0
int n2 = l2 ? l2->val:0;
int sum = n1+n2+jinwei;//当前的数字和
if(!head){
head = tail = new ListNode(sum % 10);
}
else{//表示头结点
tail->next = new ListNode(sum%10);
tail = tail->next;
}
jinwei = sum / 10;
if(l1){
l1 = l1->next;
}
if(l2){
l2 = l2->next;
}
}
if(jinwei > 0){
tail->next = new ListNode(jinwei);
}
return head;
}
};