You are given two non-empty linked lists representing two non-negative integers. 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.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807.
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) {
ListNode *tmp;
ListNode *p = l1;
ListNode *q = l2;
bool h1 = true;
short carry = 0;//用于记录是否有进位加一
short cur = 0;//用于记录当前位的累加结果
while(h1 || q != NULL || carry != 0){
cur = carry;
//判断第一个数列是否已经结束
if(h1){
cur += p->val;
}
//判断第二个数列是否结束
if(q!=NULL){
cur += q->val;
q = q->next;
}
p->val = cur % 10;
carry = cur / 10;
if(p->next == NULL){
p->next = l2;
h1 = false;
}
tmp = p;
p = p->next;
}
tmp -> next = NULL;
return l1;
}
};