问题描述
你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
样例
给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null
求解
class Solution {
public:
/**
* @param l1: the first list
* @param l2: the second list
* @return: the sum list of l1 and l2
*/
ListNode *addLists(ListNode *l1, ListNode *l2) {
// write your code here
ListNode *head = new ListNode(0);
ListNode *end = head;
ListNode *curr1 = l1;
ListNode *curr2 = l2;
int carry = 0;
while (curr1 != nullptr || curr2 != nullptr || carry != 0)
{
int a1 = 0;
int a2 = 0;
if (curr1 != nullptr)
{
a1 = curr1->val;
curr1 = curr1->next;
}
if (curr2 != nullptr)
{
a2 = curr2->val;
curr2 = curr2->next;
}
int sum = a1 + a2 + carry;
carry = sum / 10;
sum %= 10;
ListNode *curr = new ListNode(sum);
end->next = curr;
end = curr;
}
return head->next;
}
};