/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
int getLength(ListNode *head)
{
int len = 0;
while(head)
{
len++;
head=head->next;
}
return len;
};
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
{
int len1 = getLength(l1);
int len2 = getLength(l2);
if(len1==0)
return l2;
if(len2==0)
return l1;
ListNode *head, *tmp, *p;
if(len1<len2)
{
tmp = l2;
l2 = l1;
l1 = tmp;
}
head = l1;
while(l2)
{
l1->val += l2->val;
l1 = l1->next;
l2 = l2->next;
}
p = head;
int carry = 0;
while(p)
{
if((p->val+carry)>9)
{
p->val = (p->val+carry)%10;
carry = 1;
}
else
{
p->val = p->val + carry;
carry = 0;
}
tmp = p;
p = p->next;
}
if(carry==1)
tmp->next = new ListNode(1);
return head;
}
};
这里进位是向后的,个位在前面
下面的代码是个位在后面的
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
int getLength(ListNode *head)
{
int len = 0;
while(head)
{
len++;
head=head->next;
}
return len;
};
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
{
int len1 = getLength(l1);
int len2 = getLength(l2);
if(len1==0)
return l2;
if(len2==0)
return l1;
ListNode *head, *tmp, *p;
if(len1<len2)
{
tmp = l2;
l2 = l1;
l1 = tmp;
}
head = l1;
int len = max(len1,len2) - min(len1,len2);
while(len--)
l1 = l1->next;
while(l1)
{
l1->val += l2->val;
l1 = l1->next;
l2 = l2->next;
}
p = head;
head = new ListNode(0);
head->next = p;
tmp = head;
while(p)
{
if(p->val==9)
{
p = p->next;
}
else if(p->val<9)
{
tmp = p;
p = p->next;
}
else
{
tmp->val++;
p->val %= 10;
while(tmp->next!=p)
{
tmp->next->val = 0;
tmp = tmp->next;
}
tmp = tmp->next;
p = p->next;
}
}
if(head->val == 0)
{
p = head;
head = head->next;
delete p;
}
return head;
}
};