题目:
官方答案(c++):
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* dummyHead=new ListNode(0);
ListNode* p=l1,*q=l2,*curr=dummyHead;
int carry=0;
while(p!= NULL || q!=NULL)
{
int x=(p!=NULL)?p->val:0;//根据检测结果输入
int y=(q!=NULL)?q->val:0;
int sum=carry+x+y;
carry=sum/10;
curr->next=new ListNode(sum%10);
curr=curr->next;
if(p!=NULL) p=p->next;//检测数据长短
if(q!=NULL) q=q->next;
}
if(carry>0)
{
curr->next=new ListNode(carry);
}
return dummyHead->next;
}
};
结果:
原本自己想要用递归进行操作,后面发现不行,无法解决数据长短不一或者最高位相加发生进位的情况。
#include<iostream>
#include<vector>
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
ListNode(int x, ListNode *father):val(x),next(father) {}
};
class Solution {
public:
std::vector<int> tmp = {0};
int i = 0;
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* result=new ListNode(0);
tmp.push_back((l1->val + l2->val)/10);
std::cout << tmp[i] << std::endl;
i++;
if (NULL != l1->next && NULL != l2->next)
{
result->next = addTwoNumbers(l1->next, l2->next);
}
result->val = (tmp[--i] + l1->val + l2->val) % 10;
return result;
}
};
int main()
{
Solution solution;
ListNode *result;
ListNode *a1 = new ListNode(3);
ListNode *a2 = new ListNode(2,a1);
ListNode *a3 = new ListNode(4,a2);
ListNode *b1 = new ListNode(4);
ListNode *b2 = new ListNode(3, b1);
ListNode *b3 = new ListNode(6, b2);
result=solution.addTwoNumbers(a3,b3);
system("pause");
return 0;
}