给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
代码
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *result = new ListNode(0), *lastPtr=result, *l1Ptr = l1, *l2Ptr = l2;
int lastResult = 0;
while (l1Ptr != NULL || l2Ptr != NULL||lastResult>0)
{
int num1 = (l1Ptr == NULL) ? 0 : l1Ptr->val, num2 = (l2Ptr == NULL) ? 0 : l2Ptr->val;
ListNode *node = new ListNode((num1+num2+lastResult)%10);
lastResult = (num1 + num2 + lastResult) / 10;
lastPtr->next = node;
lastPtr = lastPtr->next;
l1Ptr = (l1Ptr == NULL) ? NULL : l1Ptr->next;
l2Ptr = (l2Ptr == NULL) ? NULL : l2Ptr->next;
}
return result->next;
}