涉及大数运算 所以考虑用数组来弄 感受到了自己c++的链表不熟练 之前hdu1002用数组就过了 这次刷的题目补充了很多链表的操作知识,特别是链表的初始化操作这块不熟悉 请各位大佬指教
/**
* 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> a1;
vector<int> a2;
while(l1){
a1.push_back(l1->val);
l1=l1->next;
}
while(l2){
a2.push_back(l2->val);
l2=l2->next;
}
int sum=0;
int qh=0;
sum=a1[0]+a2[0];
ListNode *temp1=new ListNode(sum%10);
ListNode *res=temp1;
int i=1;
int check=0;
int jw=sum/10;
while(true){
if(i==a1.size()){
check=2;
break;
}
if(i==a2.size()){
check=1;
break;
}
sum=a1[i]+a2[i]+jw;
jw=sum/10;
ListNode *head=new ListNode(0);
head->val=sum%10;
head->next=NULL;
temp1->next=head;
temp1=head;
i++;
}
if(a1.size()==a2.size()){
if(jw==1){
ListNode *head=new ListNode(1);
head->next=NULL;
temp1->next=head;
temp1=head;
}
return res;
}
int len=0;
if(check==1){
len=a1.size();
}
if(check==2){
len=a2.size();
}
while(i<len){
if(check==1){
sum=a1[i]+jw;
}
if(check==2){
sum=a2[i]+jw;
}
jw=sum/10;
ListNode *head=new ListNode(0);
head->val=sum%10;
head->next=NULL;
temp1->next=head;
temp1=head;
i++;
}
if(jw==1){
ListNode *head=new ListNode(1);
head->next=NULL;
temp1->next=head;
temp1=head;
}
return res;
}
};