链表基本操作
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
####思路:
就是实现一个简单的整数加法,比一些常见的数字处理题要简单,简单之处在于:
- 链表形式输出,不用考虑溢出问题。
- 输入是逆序,输出也是逆序,与正常手工计算的顺序相同,很直观。
细节:留意一下进位即可,用一个变量carry记录是否进位
时间复杂度:O(n)
空间复杂度:O(n)
实现:
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
| class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode sum = null; ListNode curSum = sum; ListNode curl1 = l1; ListNode curl2 = l2; int carry = 0; while(curl1 != null || curl2 != null || carry != 0) { int n1 = curl1 != null ? curl1.val : 0; int n2 = curl2 != null ? curl2.val : 0; int val = n1 + n2 + carry; carry = val >= 10 ? 1 : 0; val = val % 10; if(sum != null) { curSum.next = new ListNode(val, null); curSum = curSum.next; } else { sum = new ListNode(val, null); curSum = sum; } if(curl1 != null) { curl1 = curl1.next; } if(curl2 != null) { curl2 = curl2.next; } } return sum; } }
|