最初的思路是返回结果 这样在循环中最后会有一个多余的链表(0)无法删除,
之后返回结果的下一个链表 解决该问题
在计算过程中 会存在连续进位的问题 比如输入[1]和[9,9,9]
最开始没有考虑到这种情况
之后使用进位数add放到while循环中解决
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int add = 0;//进位
ListNode *res = new ListNode(0);//返回的结果的头
ListNode *ptr = res;//移动的指针
while(l1 || l2 || add) {//l1/l2共有的位置相加
int sum = add;
if(l1) sum += l1 -> val;
if(l2) sum += l2 -> val;
add = sum / 10;
ListNode *temp = new ListNode(sum % 10);
ptr -> next = temp;
ptr = ptr -> next;
if(l1)l1 = l1 -> next; //bug处 如果没有if会对空的list进行操作 程序崩溃
if(l2)l2 = l2 -> next;
}
return res -> next;
}
};