题目:
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.
题意:
两链表从尾到头组成的数字的和
思路:
一开始直接求两个数的值,然后a+b=c,把c的值构成一个链表,WA了。我以为是int的范围太小改成long long,还是不行才发现原来是大数加法~难受啊,没法子只能推倒重来~其实还是蛮简单的,只不过要细心细心再细心!!!
Code:
/**
* 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 sum=0,flag=0;
ListNode *l3,*head;
while(l1&&l2){
sum=sum+l1->val+l2->val;
if(flag==0){
l3=new ListNode(sum%10);
head=l3;
flag=1;
}
else{
head->next=new ListNode(sum%10);
head=head->next;
}
sum/=10;
l1=l1->next;
l2=l2->next;
}
while(l1){
sum=sum+l1->val;
head->next=new ListNode(sum%10);
head=head->next;
sum/=10;
if(sum==0){
head->next=l1->next;
break;
}
l1=l1->next;
}
while(l2){
sum=sum+l2->val;
head->next=new ListNode(sum%10);
head=head->next;
sum/=10;
if(sum==0){
head->next=l2->next;
break;
}
l2=l2->next;
}
if(sum) head->next=new ListNode(sum%10);
return l3;
}
};