用的是队列,并不是自己写的,惭愧
c版和c++版
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode*head=(struct ListNode*)malloc(sizeof(struct ListNode)), *tail = head;
int carry=0;
int sum;
tail->next=(struct ListNode*)malloc(sizeof(struct ListNode));
for(;l1&&l2;l1=l1->next,l2=l2->next)
{
sum = l1->val + l2->val + carry;
carry=sum/10;
sum=sum%10;
tail->next=(struct ListNode*)malloc(sizeof(struct ListNode));
tail=tail->next;
tail->val=sum;
}
l1=(l1?l1:l2);
for(;l1;l1=l1->next)
{
sum=l1->val+carry;
carry=sum/10;
sum=sum%10;
tail->next = (struct ListNode*)malloc(sizeof(struct ListNode));
tail = tail->next;
tail->val = sum;
}
if(carry)
{
tail->next = (struct ListNode*)malloc(sizeof(struct ListNode));
tail = tail->next;
tail->val = 1;
}
tail->next=NULL;
tail=head;
free(tail);
head=head->next;
return head;
}
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* fir =new ListNode(-1);
ListNode* cur =fir;
int sum,carry=0;
while(l1||l2)
{
int num1=l1?l1->val:0;
int num2=l2?l2->val:0;
sum=num1+num2+carry;
carry=sum/10;
cur->next=new ListNode(sum%10);
cur=cur->next;
if(l1) l1=l1->next;
if(l2) l2=l2->next;
}
if(carry) cur->next=new ListNode(1);
return fir->next;
}
};