/**
* 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) {
ListNode tail1 = reverse(l1);
ListNode tail2 = reverse(l2);
ListNode head = new ListNode(0);
ListNode res = head;
int flag = 0;
while(null!=tail1||null!=tail2){
int sum = flag;
if(null!=tail1){
sum += tail1.val;
tail1 = tail1.next;
}
if(null!=tail2){
sum+=tail2.val;
tail2 = tail2.next;
}
res.next = new ListNode(sum%10);
res = res.next;
flag = sum /10;
}
if(flag==1){
res.next = new ListNode(flag);
res = res.next;
}
return reverse(head.next);
}
public ListNode reverse(ListNode head){
ListNode pre = null;
while(null!=head){
ListNode next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
}