import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class algo {
public static void main(String[] args) {
ListNode listNode11 = new ListNode();
ListNode listNode21 = new ListNode();
ListNode listNode31 = new ListNode();
listNode11.val = 2;
listNode21.val = 4;
listNode31.val = 3;
listNode11.next = listNode21;
listNode21.next = listNode31;
ListNode listNode12 = new ListNode();
ListNode listNode22 = new ListNode();
ListNode listNode32 = new ListNode();
listNode12.val = 5;
listNode22.val = 6;
listNode32.val = 4;
listNode12.next = listNode22;
listNode22.next = listNode32;
addTwoNumbers(listNode11, listNode12);
}
public static class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode listNode = new ListNode();
ListNode resultNode = new ListNode();
int carry = 0;
ListNode curNode = resultNode;
while (l1 != null || l2 != null) {
int x = (l1 != null) ? l1.val : 0;
int y = (l2 != null) ? l2.val : 0;
int curVal = x + y + carry;
carry = curVal / 10;
ListNode nextNode = new ListNode();
nextNode.val = curVal / 10;
curNode.next = nextNode;
curNode = nextNode;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
if (carry > 0) {
curNode.next = new ListNode(carry);
}
return resultNode.next;
}
}