遍历二个链表,存储在vector数组内;
然后进行加法运算,注意进位,并建立新链表,采取head插入的方式
/**
* 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) {
vector<int> left,right;
while(l1!=NULL)
{
left.push_back(l1->val);
l1=l1->next;
}
while(l2!=NULL)
{
right.push_back(l2->val);
l2=l2->next;
}
ListNode *head=(ListNode*)malloc(sizeof(ListNode));
head->next=NULL;
int len1=left.size()-1,len2=right.size()-1;
int flag =0;//进位标志
while(len1>=0&&len2>=0)
{
ListNode *temp=(ListNode*)malloc(sizeof(ListNode));
temp->val=(left[len1]+right[len2]+flag)%10;
temp->next=head->next;
head->next=temp;
flag=(left[len1]+right[len2]+flag)/10;
len1--;len2--;
}
while(len1>=0)
{
ListNode *temp=(ListNode*)malloc(sizeof(ListNode));
temp->val=(left[len1]+flag)%10;
temp->next=head->next;
head->next=temp;
flag=(left[len1]+flag)/10;
len1--;
}
while(len2>=0)
{
ListNode *temp=(ListNode*)malloc(sizeof(ListNode));
temp->val=(right[len2]+flag)%10;
temp->next=head->next;
head->next=temp;
flag=(right[len2]+flag)/10;
len2--;
}
if(flag) //最高位是否有进位
{
ListNode *temp=(ListNode*)malloc(sizeof(ListNode));
temp->val=flag;
temp->next=head->next;
head->next=temp;
}
return head->next;
}
};