package com.coding.me.leetcode.algorithms;
public class AddTwoNums {
public ListNode mySolution(ListNode l1, ListNode l2) {
int carry = 0;
ListNode ret = null;
ListNode first = null;
while(l1 != null || l2 != null){
int i = l1 == null?0 : l1.val;
int j = l2 == null?0 : l2.val;
int sum = i + j + carry;
if(sum >= 10){
carry = 1;
sum -= 10;
}else{
carry = 0;
}
if(ret == null){
ret = new ListNode(sum);
first = ret;
}else{
ret.next = new ListNode(sum);
ret = ret.next;
}
if(l1 != null){
l1 = l1.next;
}
if(l2 != null){
l2 = l2.next;
}
}
if(carry > 0){
ret.next = new ListNode(carry);
}
return first;
}
public ListNode leetcodeSolution(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(0);
ListNode p = l1, q = l2, curr = dummyHead;
int carry = 0;
while (p != null || q != null) {
int x = (p != null) ? p.val : 0;
int y = (q != null) ? q.val : 0;
int sum = carry + x + y;
carry = sum / 10;
curr.next = new ListNode(sum % 10);
curr = curr.next;
if (p != null) p = p.next;
if (q != null) q = q.next;
}
if (carry > 0) {
curr.next = new ListNode(carry);
}
return dummyHead.next;
}
public static void main(String[] args) {
ListNode l11 = new ListNode(2);
ListNode l12 = new ListNode(4);
ListNode l13 = new ListNode(3);
l11.next = l12;
l12.next = l13;
ListNode l21 = new ListNode(5);
ListNode l22 = new ListNode(6);
ListNode l23 = new ListNode(4);
l21.next = l22;
l22.next = l23;
ListNode ret = new AddTwoNums().mySolution(l11, l21);
while(ret != null){
System.out.println(ret.val);
ret = ret.next;
}
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}