想法
我的作法可能沒有那麼好,我是用 vector 存數字,接著進行運算,最後再轉成 link-list。
code
1 2 3 4 5 6 7 8 9 10
| /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { vector<int> n1,n2; n1.emplace_back(l1->val); while(l1->next!=nullptr){ l1=l1->next; n1.emplace_back(l1->val); }
n2.emplace_back(l2->val); while(l2->next!=nullptr){ l2=l2->next; n2.emplace_back(l2->val); }
vector<int> ans(max(n1.size(),n2.size())+1); for(int i=0;i<n1.size();++i){ ans[i]+=n1[i]; }
for(int i=0;i<n2.size();++i){ ans[i]+=n2[i]; }
for(int i=0;i<max(n1.size(),n2.size());++i){ if(ans[i]>=10){ ans[i+1]++; ans[i]-=10; } }
if(ans.back()==0){ ans.pop_back(); }
ListNode *ret=new ListNode(ans[0]),*a=ret,*b=nullptr; for(int i=1;i<ans.size();++i){ b=new ListNode(ans[i]); a->next=b; a=b; }
return ret; } };
|