题目描述
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
code(c++)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int carry = 0;
ListNode *p1 = l1;
ListNode *p2 = l2;
ListNode *p0 = new ListNode(0);
p0->next = l1;
while(p1 != NULL && p2 != NULL){
p0 = p0->next;
int ansVal = p1->val + p2->val + carry;
p0->val = ansVal % 10;
carry = ansVal / 10;
p1 = p1->next;
p2 = p2->next;
}
p0->next = p1 != NULL ? p1 : p2;
if (carry != 0){
if (p1 == NULL && p2 == NULL)
p0->next = new ListNode(carry);
else{
while (carry != 0 && p0->next != NULL){
int temp = p0->next->val + carry;
p0->next->val = temp % 10;
carry = temp / 10;
p0 = p0->next;
}
p0->next = carry == 1 ?
new ListNode(carry) : p0->next;
}
}
return l1;
}
};