1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode ptrOne = l1, ptrTwo = l2, head = new ListNode(0), ptrThree = head; int carry = 0; while (ptrOne != null || ptrTwo != null || carry != 0) { int numOne = ptrOne == null ? 0 : ptrOne.val; int numTwo = ptrTwo == null ? 0 : ptrTwo.val; int sum = numOne + numTwo + carry; int newDigit = sum % 10; carry = sum / 10; ptrThree.next = new ListNode(newDigit); ptrThree = ptrThree.next; ptrOne = ptrOne == null ? null : ptrOne.next; ptrTwo = ptrTwo == null ? null : ptrTwo.next; } return head.next; } }
|
首先我们要思考某一位是否还有数字可以加, 如果有我们就new一个node出来来存储这一位的和, 但是问题是, 如何让上一个node指向现在的node呢? 于是我们需要在产生这个新node前停留在上一个node处, 这样就可以让上一个node的next指向这个新产生的node. 还有就是如果l1或者l2出现null的情况时, 我们要让它们在该位表示的数字为0.
时间复杂度: O(n) n是l1和l2中长的那个的长度.
空间复杂度: O(n) 答案要被存储.