You have two numbers represented by a linked list, where each node contains a single digit. The digits are stored in reverse
order, such that the 1's digit is at the head of the list. Write a function that adds the two numbers and returns the sum as a linked list.
Example
Given 7->1->6 + 5->9->2
. That is, 617 + 295
.
Return 2->1->9
. That is 912
.
Given 3->1->5
and 5->9->2
, return 8->0->8
.
遍历一次链表,对应每个元素相加,设置进位,最后一个节点需要注意,需判断是否有进位。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(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* tail=head;
int carry=0;
while(l1 || l2)
{
int num1 = l1? l1->val : 0;
int num2 = l2? l2->val : 0;
int sum = carry+num1+num2;
tail->next = new ListNode(sum % 10);
carry = sum/10;
tail = tail->next;
if(l1)
l1=l1->next;
if(l2)
l2=l2->next;
}
if(carry)
tail->next=new ListNode(carry);
return head->next;
}
};