import common.ListNode;
/**
* https://leetcode.cn/problems/add-two-numbers/
*
*
*
* 0 0
*/
public class L0002_AddTwoNumbers {
/**
*
*
* @param l1
* @param l2
* @return
*/
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//
ListNode dummy = new ListNode(0);
ListNode curr = dummy;
//
int carry = 0;
// l1 l2
while (l1 != null || l2 != null || carry != 0) {
// 0
int x = l1 != null ? l1.val : 0;
int y = l2 != null ? l2.val : 0;
//
int sum = x + y + carry;
carry = sum / 10;
//
curr.next = new ListNode(sum % 10);
curr = curr.next;
//
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
return dummy.next;
}
public static void main(String[] args) {
//
L0002_AddTwoNumbers solution = new L0002_AddTwoNumbers();
// 1: l1 = [2,4,3], l2 = [5,6,4]
ListNode l1 = new ListNode(2);
l1.next = new ListNode(4);
l1.next.next = new ListNode(3);
ListNode l2 = new ListNode(5);
l2.next = new ListNode(6);
l2.next.next = new ListNode(4);
System.out.println(" 1:");
System.out.println(": l1 = [2,4,3], l2 = [5,6,4]");
System.out.print(": ");
printList(solution.addTwoNumbers(l1, l2));
// 2: l1 = [0], l2 = [0]
ListNode l3 = new ListNode(0);
ListNode l4 = new ListNode(0);
System.out.println("\n 2:");
System.out.println(": l1 = [0], l2 = [0]");
System.out.print(": ");
printList(solution.addTwoNumbers(l3, l4));
// 3: l1 = [9,9,9,9], l2 = [9,9,9]
ListNode l5 = new ListNode(9);
l5.next = new ListNode(9);
l5.next.next = new ListNode(9);
l5.next.next.next = new ListNode(9);
ListNode l6 = new ListNode(9);
l6.next = new ListNode(9);
l6.next.next = new ListNode(9);
System.out.println("\n 3:");
System.out.println(": l1 = [9,9,9,9], l2 = [9,9,9]");
System.out.print(": ");
printList(solution.addTwoNumbers(l5, l6));
}
/**
*
*/
private static void printList(ListNode head) {
ListNode curr = head;
while (curr != null) {
System.out.print(curr.val);
if (curr.next != null) {
System.out.print(" -> ");
}
curr = curr.next;
}
System.out.println();
}
}