思路:按照加法法则相加即可,尽量少使用额外空间,注意进位的处理,如果最后的进位还是1,说明需要增加一个节点,其值为1
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2){
int addBit = 0;
ListNode * firstList = l1, *secondList = l2, *h = l1, *p = l1;
while(firstList && secondList){
int ret = firstList->val + secondList->val + addBit;
addBit = ret / 10;
ret %= 10;
firstList->val = ret;
p = firstList;
firstList = firstList->next;
secondList = secondList ->next;
}
if(secondList)p->next = secondList;
while(secondList){
secondList->val += addBit;
addBit = secondList->val / 10;
secondList->val %= 10;
p = secondList;
secondList = secondList->next;
}
while(firstList){
firstList->val += addBit;
addBit = firstList->val / 10;
firstList->val %= 10;
p = firstList;
firstList = firstList->next;
}
if(addBit){
ListNode *temp = new ListNode(1);
p->next = temp;
}
return h;
}
};