这题思路简单,先找到l1和l2里面最长的那一个,然后用最长的链表保存答案。这是因为题目有空间限制。最后如果有进位,只需创建1个节点保存新的位即可。
/**
* 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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int carry = 0;
ListNode *head, *prev;
ListNode *c1 = l1, *c2 = l2;
while (c1 && c2) {
c1 = c1->next;
c2 = c2->next;
}
if (c2) c1 = l2, c2 = l1;
else c1 = l1, c2 = l2;
head = c1;
while (c1) {
c1->val += carry + (c2 ? c2->val : 0);
carry = c1->val > 9;
c1->val %= 10;
prev = c1;
c1 = c1->next;
if (c2) c2 = c2->next;
}
if (carry) prev->next = new ListNode(1);
return head;
}
};