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;
    }
}

results matching ""

    No results matching ""