|
3 | 3 | * public class ListNode {
|
4 | 4 | * int val;
|
5 | 5 | * ListNode next;
|
6 |
| - * ListNode(int x) { val = x; } |
| 6 | + * ListNode() {} |
| 7 | + * ListNode(int val) { this.val = val; } |
| 8 | + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } |
7 | 9 | * }
|
8 | 10 | */
|
9 | 11 | class Solution {
|
10 |
| - public ListNode addTwoNumbers(ListNode l1, ListNode l2) { |
11 |
| - ListNode l1Rev = reverse(l1); |
12 |
| - ListNode l2Rev = reverse(l2); |
13 |
| - |
14 |
| - ListNode ans = new ListNode(-1); |
15 |
| - ListNode curr = ans; |
16 |
| - int carry = 0; |
17 |
| - |
18 |
| - while (l1Rev != null || l2Rev != null) { |
19 |
| - int temp = 0; |
20 |
| - if (l1Rev != null && l2Rev != null) { |
21 |
| - temp = l1Rev.val + l2Rev.val + carry; |
22 |
| - l1Rev = l1Rev.next; |
23 |
| - l2Rev = l2Rev.next; |
24 |
| - } |
25 |
| - else if(l1Rev != null) { |
26 |
| - temp = l1Rev.val + carry; |
27 |
| - l1Rev = l1Rev.next; |
28 |
| - } |
29 |
| - else { |
30 |
| - temp = l2Rev.val + carry; |
31 |
| - l2Rev = l2Rev.next; |
32 |
| - } |
33 |
| - |
34 |
| - if (temp > 9) { |
35 |
| - carry = temp/10; |
36 |
| - temp = temp%10; |
37 |
| - } |
38 |
| - else { |
39 |
| - carry = 0; |
40 |
| - } |
41 |
| - curr.next = new ListNode(temp); |
42 |
| - curr = curr.next; |
43 |
| - } |
44 |
| - |
45 |
| - if (carry != 0) { |
46 |
| - curr.next = new ListNode(carry); |
47 |
| - curr = curr.next; |
48 |
| - } |
49 |
| - |
50 |
| - return reverse(ans.next); |
| 12 | + public ListNode addTwoNumbers(ListNode l1, ListNode l2) { |
| 13 | + ListNode revL1 = reverse(l1); |
| 14 | + ListNode revL2 = reverse(l2); |
| 15 | + ListNode dummy = new ListNode(0); |
| 16 | + ListNode curr = dummy; |
| 17 | + int carry = 0; |
| 18 | + while (revL1 != null || revL2 != null || carry != 0) { |
| 19 | + if (revL1 != null && revL2 != null) { |
| 20 | + carry += revL1.val + revL2.val; |
| 21 | + revL1 = revL1.next; |
| 22 | + revL2 = revL2.next; |
| 23 | + } else if (revL1 != null && revL2 == null) { |
| 24 | + carry += revL1.val; |
| 25 | + revL1 = revL1.next; |
| 26 | + } else if (revL1 == null && revL2 != null) { |
| 27 | + carry += revL2.val; |
| 28 | + revL2 = revL2.next; |
| 29 | + } |
| 30 | + curr.next = new ListNode(carry % 10); |
| 31 | + carry /= 10; |
| 32 | + curr = curr.next; |
51 | 33 | }
|
52 |
| - |
53 |
| - private ListNode reverse(ListNode head) { |
54 |
| - ListNode curr = head; |
55 |
| - ListNode prev = null; |
56 |
| - ListNode next = null; |
57 |
| - |
58 |
| - while (curr != null) { |
59 |
| - next = curr.next; |
60 |
| - curr.next = prev; |
61 |
| - prev = curr; |
62 |
| - curr = next; |
63 |
| - } |
64 |
| - |
65 |
| - return prev; |
| 34 | + return reverse(dummy.next); |
| 35 | + } |
| 36 | + |
| 37 | + private ListNode reverse(ListNode root) { |
| 38 | + ListNode curr = root; |
| 39 | + ListNode prev = null; |
| 40 | + while (curr != null) { |
| 41 | + ListNode next = curr.next; |
| 42 | + curr.next = prev; |
| 43 | + prev = curr; |
| 44 | + curr = next; |
66 | 45 | }
|
| 46 | + return prev; |
| 47 | + } |
67 | 48 | }
|
0 commit comments