目录

力扣两数相加

力扣——两数相加

题目链接:

题目描述:

https://i-blog.csdnimg.cn/direct/1e32b9766f9840adbef57d3d225d6b30.png

https://i-blog.csdnimg.cn/direct/7d91e28f5bbb4490b8e197a8917d7b97.png

思路:

关键是进位

可能有两种情况:

  1. a+b>9
  2. a+b+进位>9

所以,需要一个变量表示进位的数字,两数之和应该是 sum=a+b+进位

每一位的数字是:sum%10

每一位的进位是:sum/10

这里需要 新建节点 ,所以我们可以在新建节点的时候把val设置好

这样,第一个节点就不是真正的头节点,下一个才是

实现代码:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = new ListNode();
        ListNode cur = head;
        int carry = 0;
        while(l1 != null || l2 != null){
            int num1 = l1 != null ? l1.val : 0;
            int num2 = l2 != null ? l2.val : 0;
            int s = num1 + num2 + carry;
            carry = s/10;
            s = s%10;
            cur.next = new ListNode(s);

            cur = cur.next;
            l1 = l1 == null ? l1 : l1.next;
            l2 = l2 == null ? l2 : l2.next;
        }
        if(carry != 0){
            cur.next = new ListNode(carry);
        }
        return head.next;
    }
}