LeetCode算法第二题Add Two Numbers,求两个正整数的和,其中正整数用链表反向存储。
例: 输入(2-> 4 -> 3) + (5 -> 6 -> 4)
输出 7 -> 0 -> 8
解释 342 + 465 = 807
这题就是链表的基本操作和加法的运算法则相结合,比较简单。主要注意进位carry的处理,不要忘记最后如果carry=1,要在链表中新建一个节点表示最高位1。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode res = new ListNode(-1);
ListNode cur = res;
int carry = 0;
while (l1 != null || l2 != null){
int a = l1 == null ? 0 : l1.val;
int b = l2 == null ? 0 : l2.val;
int sum = a + b + carry;
carry = sum < 10 ? 0 : 1;
sum = sum % 10;
cur.next = new ListNode(sum);
cur = cur.next;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
if (carry == 1) cur.next = new ListNode(1);
return res.next;
}
}