2. Add Two Numbers
做题历程:
- 应该至少是第二次做了,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;
}
};