public void Test1() { var list1 = new ListNode(2) { next = new ListNode(4) { next = new ListNode(3) } }; var list2 = new ListNode(5) { next = new ListNode(6) { next = new ListNode(4) } }; var output = new ListNode(7) { next = new ListNode(0) { next = new ListNode(8) } }; Assert.Equal(output, new Solution().AddTwoNumbers(list1, list2)); }
public void Test3() { var list1 = new ListNode(0); var list2 = new ListNode(0); var output = new ListNode(0); Assert.Equal(output, new Solution().AddTwoNumbers(list1, list2)); }
public ListNode AddTwoNumbers(ListNode l1, ListNode l2) { ListNode root = null, cnt = null; void Concat(ListNode node) { if (root == null) { root = cnt = node; } else { cnt.next = node; cnt = node; } } int up = 0; while (true) { var value = up + (l1?.val ?? 0) + (l2?.val ?? 0); if (l1 == null && l2 == null && up == 0) { break; } else { up = 0; if (value >= 10) { up = value / 10; value %= 10; } Concat(new ListNode(value)); } l1 = l1?.next; l2 = l2?.next; } return(root); }