leetcode-华为专题-445. 两数相加 II

 

 

/**
 * 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) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        vector<int> tmp1;
        vector<int> tmp2;

        while(l1){
            tmp1.push_back(l1->val);
            l1 = l1->next;
        }
        while(l2){
            tmp2.push_back(l2->val);
            l2 = l2->next;
        }
   
        int i = tmp1.size()-1;
        int j = tmp2.size()-1;
        int sum = 0;
        int cur = 0;
        int res = 0;
        vector<int> vec;

        while(i>=0||j>=0){
            cout<<"i:"<<i<<" j: "<<j<<endl;
            if(i<0)
                sum = tmp2[j];
            else if(j<0)
                sum = tmp1[i];
            else
                sum = tmp1[i]+tmp2[j];
            cur = (sum+res)%10;
            res = (sum+res)/10;
            vec.push_back(cur);
            i--;
            j--;
        }
        if(res>0) // 如果最后还有进位
            vec.push_back(res);

        ListNode* H = new ListNode();
        ListNode* L = H;
        for(int i = vec.size()-1; i >= 0; i--){
            ListNode* tmp = new ListNode(vec[i]);
            L->next = tmp;
            L = L->next;
        }
        return H->next;
    }
};

 

posted @ 2021-08-18 14:58  三一一一317  阅读(46)  评论(0)    收藏  举报