c++:
/**
* 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 preHead(0), *p = &preHead;
int carry = 0;
while (l1 || l2 || carry) {
int sum = carry + (l1 ? l1->val : 0) + (l2 ? l2->val : 0);
p->next = new ListNode(sum % 10);
carry = sum / 10;
p = p->next;
l1 = l1 ? l1->next : l1;
l2 = l2 ? l2->next : l2;
}
return preHead.next;
}
};
java:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int addend = 0;
ListNode l3 = new ListNode(-1);
ListNode HeadNode = l3;
while(l1 != null || l2 != null || addend != 0) {
l3.next = new ListNode(-1);
l3 = l3.next;
l3.val = ((l1 == null ? 0 : l1.val) + (l2 == null ? 0 : l2.val) + addend) % 10;
addend = ((l1 == null ? 0 : l1.val) + (l2 == null ? 0 : l2.val) + addend) / 10;
if(l1 != null) l1 = l1.next;
if(l2 != null) l2 = l2.next;
}
return HeadNode.next;
}
}