LeetCode 2.两数相加 时间复杂度O(n) 解法一:递归 class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { if (l2 == null) { return l1; } else if (l1 == null && l2 != null) { return l2; }else { l1.val = l1.val + l2.val; jinwei(l1); l1.next = addTwoNumbers(l1.next, l2.next); return l1; } } public void jinwei(ListNode l1) { if (l1.val > 9){ if (l1.next == null){ l1.next = new ListNode(l1.val/10); }else { l1.next.val += l1.val / 10; jinwei(l1.next); } l1.val %= 10; } }}//runtime:2 ms//memory:39.3 MB 解法二:链表计数,如果大于10就进一位 class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { int i = 0; ListNode root = new ListNode(0); ListNode node = root; while(l1!= null || l2 !=null || i != 0){ int v1 = l1 != null? l1.val: 0; int v2 = l2 != null? l2.val: 0; ListNode sNode = new ListNode((v1 + v2 + i) % 10); node.next = sNode; node = sNode; i = (v1 + v2 + i) / 10; if(l1 != null) l1 = l1.next; if(l2 != null) l2 = l2.next; } return root.next; }}//runtime:2 ms//memory:39 MB