题目
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
/**
* 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) {
// add code here
}
}
本人的解
不算快,49 ms, Your runtime beats 9.95% of cpp submissions
/**
* 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) {
ListNode *d1 = l1, *d2 = l2;
ListNode *r = new ListNode(0), *p = r;
do {
int c = (d1 ? d1->val : 0) + (d2 ? d2->val : 0) + p->val;
d1 = d1 ? d1->next : 0;
d2 = d2 ? d2->next : 0;
p->val = (c % 10);
if( d1 || d2 || c >= 10 ) {
p->next = new ListNode(c / 10);
p = p->next;
}
} while( d1 || d2);
return r;
}
}