这道题目,思路很简单
class Solution {
private:
vector<int> nums1;
vector<int> nums2;
//将vector数组转换成ListNode格式
ListNode* vec_ListNode(vector<int>&nums)
{
ListNode* dummy = new ListNode(0);
ListNode* res = dummy;
for (int i = nums.size()-1; i>=0; i--)
{
if (i > 0 || nums[0] == 1) {
ListNode* node = new ListNode(nums[i]);
dummy->next = node;
dummy = dummy->next;
}
}
return res->next;
}
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
nums1.clear();
nums2.clear();
//将链表l1,l2转换成nums1,nums2
while (l1)
{
nums1.push_back(l1->val);
l1 = l1->next;
}
while (l2)
{
nums2.push_back(l2->val);
l2 = l2->next;
}
reverse(nums1.begin(), nums1.end());
reverse(nums2.begin(), nums2.end());
int len1 = nums1.size();
int len2 = nums2.size();
int size = len1>len2?len1:len2;//取两个数组中长度较长的为size
vector<int> res(size + 1, 0);//重新定义一个长度为size+1的数组(9999+1 = 10000)和变成了5位
for (int i = size; i >= 1; --i)
{
int res1, res2;
if (nums1.size() > 0)
{
res1 = nums1.back();
nums1.pop_back();
}
else
res1 = 0;
if (nums2.size() > 0)
{
res2 = nums2.back();
nums2.pop_back();
}
else
res2 = 0;
res[i] = res[i] + res1 + res2;
if (res[i] >= 10)
{
res[i] = res[i]-10;
res[i - 1] = 1;
}
}
ListNode* node1 = vec_ListNode(res);
return node1;
}
};