我真的是服了,尽给我搞这些,这代码明明差不多了
/**
* 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) {
double num1=0,num2=0;
double sum=0;
ListNode *head=nullptr;
ListNode *prev=nullptr;
double tag1=1,tag2=1;
while(l1!=nullptr){
num1=num1+(double)(l1->val)*tag1;
l1=l1->next;
tag1*=10;
}
while(l2!=nullptr){
num2=num2+(double)(l2->val)*tag2;
l2=l2->next;
tag2*=10;
}
sum=num1+num2;
if(sum==0){
head=new ListNode(sum%10);
}
while(sum){
ListNode*newnode=new ListNode(sum%10);
if(head==nullptr){
head=newnode;
}
else{
prev->next=newnode;
}
prev=newnode;
sum/=10;
}
return head;
}
};
本来全是int的,结果有一个例子:
必须用double了,然后又出现以下问题:
心态有点暴躁。。
看看以后这个方案有啥办法解决。
看了看题解,直接用链表加就行了(主要多个进位)
/**
* 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) {
ListNode* head=new ListNode(-1);
ListNode* cur=head;
int sum=0,carry=0;
while(l1||l2||carry){
sum=0;
if(l1!=nullptr){
sum+=l1->val;
l1=l1->next;
}
if(l2!=nullptr){
sum+=l2->val;
l2=l2->next;
}
sum+=carry;
ListNode*newnode=new ListNode(sum%10);
carry=sum/10;
cur->next=newnode;
cur=newnode;
}
return head->next;
}
};