
explanation
// 两个数字位数一样吗?
// 位数不一样也没有关系,因为是reverse order, head是低位,无论如何都要从低位开始加,进位到后面的node
method 1: 三个while
O(n + m)
或者
O(max(m, n)) while iterator O(max(m, n))次
method 2: 一个while O(n + m)
或者
O(max(m, n))
code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
class { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(0); ListNode prev = dummy; int carry = 0; while (l1 != null && l2 != null) { int sum = l1.val + l2.val + carry; int curt = sum % 10; carry = sum / 10; ListNode newNode = new ListNode(curt); prev.next = newNode; prev = prev.next; l1 = l1.next; l2 = l2.next; } while ( l1 != null) { int sum = l1.val + carry; int curt = sum % 10; carry = sum / 10; ListNode newNode = new ListNode(curt); prev.next = newNode; prev = prev.next; l1 = l1.next; } while ( l2 != null) { int sum = l2.val + carry; int curt = sum % 10; carry = sum / 10; ListNode newNode = new ListNode(curt); prev.next = newNode; prev = prev.next; l2 = l2.next; } if (carry > 0) { ListNode newNode = new ListNode(carry); prev.next = newNode; } return dummy.next; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
class { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(0); ListNode prev = dummy; int carry = 0; while (l1 != null || l2 != null || carry != 0) { int x = (l1 == null) ? 0 : l1.val; int y = (l2 == null) ? 0 : l2.val; int sum = x + y + carry; int curt = sum % 10; carry = sum / 10; ListNode newNode = new ListNode(curt); prev.next = newNode; prev = prev.next; if (l1 != null) { l1 = l1.next; } if (l2 != null) { l2 = l2.next; } } return dummy.next;
} }
|
近期评论