@@ -20,39 +20,27 @@ class ListNode {
2020public class AddTwoNumbers {
2121
2222 public ListNode addTwoNumbers (ListNode l1 , ListNode l2 ) {
23- int sum = l1 .val + l2 .val ;
24- ListNode head = new ListNode (sum % 10 );
25- int highBit = sum / 10 ;
26- ListNode newCur = head ;
27- ListNode i = l1 .next ;
28- ListNode j = l2 .next ;
29- while (i != null && j != null ) {
30- sum = i .val + j .val ;
31- ListNode newNode = new ListNode ((sum +highBit ) % 10 );
32- newCur .next = newNode ;
33- newCur = newNode ;
34- highBit = (sum + highBit ) / 10 ;
35- i = i .next ;
36- j = j .next ;
23+ ListNode head = new ListNode (0 );
24+ ListNode curNode = head , i = l1 , j = l2 ;
25+ int carry = 0 ;
26+ while (i != null || j != null ) {
27+ int v1 = i == null ? 0 : i .val ;
28+ int v2 = j == null ? 0 : j .val ;
29+ int sum = carry + v1 + v2 ;
30+ ListNode newNode = new ListNode (sum % 10 );
31+ curNode .next = newNode ;
32+ curNode = newNode ;
33+ carry = sum / 10 ;
34+ if (i != null ){
35+ i = i .next ;
36+ }
37+ if (j != null ){
38+ j = j .next ;
39+ }
3740 }
38- while (i != null ) {
39- ListNode newNode = new ListNode ((i .val +highBit ) % 10 );
40- newCur .next = newNode ;
41- newCur = newNode ;
42- highBit = (i .val +highBit ) / 10 ;
43- i = i .next ;
41+ if (carry > 0 ) {
42+ curNode .next = new ListNode (carry );
4443 }
45- while (j != null ) {
46- ListNode newNode = new ListNode ((j .val +highBit ) % 10 );
47- newCur .next = newNode ;
48- newCur = newNode ;
49- highBit = (j .val +highBit ) / 10 ;
50- j = j .next ;
51- }
52- if (highBit == 1 ) {
53- ListNode newNode = new ListNode (highBit );
54- newCur .next = newNode ;
55- }
56- return head ;
44+ return head .next ;
5745 }
5846}
0 commit comments