2. Add Two Numbers
两个list分别保存两个数字的每一位,比如1->2->3表示321(注意第一个元素是个位),求这两个数字的和,也是用一个list表示。
还是比较简单的,解法也很直观,主要考察list的遍历吧。
关键点:
- 求和后如果有进位如何处理
- 两个list长度不一致如何处理
这道题还可以有个延伸:如果1->2->3表示的不是321,而是123,又该如何处理。简单点就是先reverse list,但应该有更好的解法。
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0);
ListNode current = dummy;
int last = 0; // 保存进位信息
while (!(l1 == null && l2 == null)) { // 遍历直到2个list都结束
int v1 = 0, v2 = 0;
if (l1 != null) {
v1 = l1.val;
l1 = l1.next;
}
if (l2 != null) {
v2 = l2.val;
l2 = l2.next;
}
int sum = v1 + v2 + last; // 求和
last = sum / 10; // 满10进位
ListNode tmp = new ListNode(sum % 10); // 当前位的数字
current.next = tmp;
current = current.next;
}
if (last != 0) { // 注意最后的进位
current.next = new ListNode(last);
}
return dummy.next;
}
}