2. Add Two Numbers


做题历程:

  1. 应该至少是第二次做了,2016年9月7日,用时13分钟独立解出

本题应该算是难度并不高,基本就是考察Linked List的写法,其实越是这种题,我越应该予以重视。。如果不是面超级牛逼的公司,我觉得这种考基本功的题目还是挺重要的。

解法基本应该没问题,只不过我的写法可能未必是最简的,代码如下:

/**
 * 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) {
        int carry = 0;
        int len1 = length(l1);
        int len2 = length(l2);
        if (len1 < len2) {
            swap(l1, l2);
            len1 = length(l1);
            len2 = length(l2);
        }
        ListNode* head = l1;
        ListNode* prev;
        while (l2 != nullptr) {
            int sum = l1->val + l2->val + carry;
            l1->val = sum % 10;
            carry = sum / 10;
            prev = l1;
            l1 = l1->next;
            l2 = l2->next;
        }
        while (l1 != nullptr) {
            int sum = l1->val + carry;
            l1->val = sum % 10;
            carry = sum / 10;
            prev = l1;
            l1 = l1->next;
        }
        if (carry != 0) {
            ListNode* new_node = new ListNode(carry);
            prev->next = new_node;
        }
        return head;
    }
private:
    int length(ListNode* l) {
        ListNode* tmp = l;
        int count = 0;
        while (tmp != nullptr) {
            tmp = tmp->next;
            ++count;
        }
        return count;
    }
};

results matching ""

    No results matching ""