解题思路
创建一个头结点,之后遍历两个链表,每次循环两个结点的值以及进位相加,更新进位的值,并用相加的结果的个位作为新结点的值链入新链表中,之后判断是否有未遍历完的链表,将未遍历完的链表用left保存,若该结点的值加上进位的结果小于十则直接修改left的值并链入新链表就好了,否则与进位相加可能会修改每一个结点的值,不断遍历直到left为空。最后检查进位是否非零,非零的话还要建立一个结点,完成。
代码
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
if (l1 == NULL)
return l2;
if (l2 == NULL)
return l1;
ListNode *first = new ListNode(0);
ListNode *tail = first;
ListNode *p = l1;
ListNode *q = l2;
int carry = 0;
while (p != NULL && q != NULL){
int tmp = p->val + q->val + carry;
carry = tmp / 10;
tmp %= 10;
ListNode *s = new ListNode(tmp);
tail->next = s;
tail = tail->next;
p = p->next;
q = q->next;
}
ListNode *left = p ? p : q;
if (left != NULL){
if (left->val + carry < 10){
left->val = left->val + carry;
carry = 0;
tail->next = left;
}
else{
while (left){
int tmp = left->val + carry;
carry = tmp / 10;
tmp %= 10;
ListNode *s = new ListNode(tmp);
tail->next = s;
tail = tail->next;
left = left->next;
}
}
}
if (carry != 0){
ListNode *s = new ListNode(carry);
tail->next = s;
}
return first->next;
}
};